得到一個屏幕尺寸的三種方法如下:
// 通過WindowManager獲取
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
// 通過Resources獲取
DisplayMetrics dm2 = getResources().getDisplayMetrics();
// 獲取屏幕的默認分辨率
Display display = getWindowManager().getDefaultDisplay();
System.out.println("width-display :" + display.getWidth());
System.out.println("heigth-display :" + display.getHeight());
在安卓4.2系統中,使用方法一得到了正確的屏幕尺寸值,而使用方法二和三得到的值全部為零。原因不祥。其中方法三中的display.getWidth()和display.getHeight()已被棄用。
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);//display = getWindowManager().getDefaultDisplay();display.getMetrics(dm)(把屏幕尺寸信息賦值給DisplayMetrics dm);
width = dm.widthPixels;
height = dm.heightPixels;
xdpi = dm.xdpi;
ydpi = dm.ydpi;
density = dm.densityDpi;
fdensity = dm.density;
查詢log,得到各值如下:
D/Lichking(22643): -----------widthpixels---540
D/Lichking(22643): -----------heightpixels---960
D/Lichking(22643): -----------xdpi---244.92857
D/Lichking(22643): -----------ydpi---246.30302
D/Lichking(22643): -----------density---240
D/Lichking(22643): -----------fdensity---1.5
另提一點,我們通常所指的屏幕上的int尺寸是像素單位,比如我用getHitRect()得到控件的矩形坐標的值即使和像素尺寸相匹配的。
DisplayMetrics和Display的關系。
Display指代顯示區域這個對象,它可能是真實的物理屏幕,也可能僅指應用程序的顯示區域,比如在非全屏Activity里,系統因為有狀態欄,因此顯示區域要比物理屏幕要小。DisplayMetrics里封裝了顯示區域的各種屬性值。查看源碼發現,在DisplayMetrics對各個屬性值的注釋都說明為真實的物理尺寸。而且也發現display.getMetrics(dm)這一函數基本在應用在獲取真實屏幕尺寸的時候。記住這一點即好。
另外xdpi不是指屏幕寬度上以dp為單位的大小。以dp為單位的屏幕寬度需用計算公式:dpWidth = WidthPixels / fdensity = 540 / 1.5 = 360