Android獲取屏幕的寬度和高度(dp)

    一般我們需要的寬度和高度都是需要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" />




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章