一般我們需要的寬度和高度都是需要dp格式,但是在網上找了一大堆的資料基本上得到的寬度和高度都是像素(Pixels)型的寬度和高度,與我們所需要的不一樣,後面經過查找資料終於找到解決辦法,下面上代碼,老鳥勿噴
public void getAndroiodScreenProperty(){
WindowManager wm = (WindowManager) this.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics dm = new DisplayMetrics();
wm.getDefaultDisplay().getMetrics(dm);
int width = dm.widthPixels;// 屏幕寬度(像素)
int height= dm.heightPixels; // 屏幕高度(像素)
float density = dm.density;//屏幕密度(0.75 / 1.0 / 1.5)
int densityDpi = dm.densityDpi;//屏幕密度dpi(120 / 160 / 240)
//屏幕寬度算法:屏幕寬度(像素)/屏幕密度
int screenWidth = (int) (width/density);//屏幕寬度(dp)
int screenHeight = (int)(height/density);//屏幕高度(dp)
Log.e("123", screenWidth + "======" + screenHeight);
}
需要注意的是,在一個低密度的小屏手機上,僅靠上面的代碼是不能獲取正確的尺寸的。
比如說,一部240x320像素的低密度手機,如果運行上述代碼,獲取到的屏幕尺寸是320x427。
因此,研究之後發現,若沒有設定多分辨率支持的話,
Android系統會將240x320的低密度(120)尺寸轉換爲中等密度(160)對應的尺寸,
這樣的話就大大影響了程序的編碼。
所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens節點,如下:
<!-- 得到屏幕正常的物理尺寸 -->
<supports-screens
android:smallScreens="true"
android:normalScreens="true"
android:largeScreens="true"
android:resizeable="true"
android:anyDensity="true" />