標籤:
得到一個螢幕尺寸的三種方法如下:
// 通過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
Android 擷取螢幕解析度