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

相信各位做Android開發(fā)的朋友們對(duì)Android手機(jī)做適配是件很煩的事。在美工里一般用的單位是px,而Android為了適配,官方提供了dp這樣一個(gè)單位在布局文件里使用。但是如果要?jiǎng)討B(tài)調(diào)整控件的大小呢?在代碼里面又怎么使用dp呢?其實(shí)dp這個(gè)單位只是分辨率和像素密度的一個(gè)比值,我們只需要獲取到這兩個(gè)值,把他們出一下就行了,就是這么簡(jiǎn)單。廢話不多說,代碼貼上:

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.d("h_bl", "屏幕寬度(像素):" + width);
        Log.d("h_bl", "屏幕高度(像素):" + height);
        Log.d("h_bl", "屏幕密度(0.75 / 1.0 / 1.5):" + density);
        Log.d("h_bl", "屏幕密度dpi(120 / 160 / 240):" + densityDpi);
        Log.d("h_bl", "屏幕寬度(dp):" + screenWidth);
        Log.d("h_bl", "屏幕高度(dp):" + screenHeight);
    }

需要注意的是,在一個(gè)低密度的小屏手機(jī)上,僅靠上面的代碼是不能獲取正確的尺寸的。

比如說,一部240x320像素的低密度手機(jī),如果運(yùn)行上述代碼,獲取到的屏幕尺寸是320x427。

因此,研究之后發(fā)現(xiàn),若沒有設(shè)定多分辨率支持的話,

Android系統(tǒng)會(huì)將240x320的低密度(120)尺寸轉(zhuǎn)換為中等密度(160)對(duì)應(yīng)的尺寸,

這樣的話就大大影響了程序的編碼。

所以,需要在工程的AndroidManifest.xml文件中,加入supports-screens節(jié)點(diǎn),如下:

     <!-- 得到屏幕正常的物理尺寸 -->
     <supports-screens
             android:smallScreens="true"
             android:normalScreens="true"
             android:largeScreens="true"
             android:resizeable="true"
             android:anyDensity="true" />

原文:https://blog.csdn.net/wangliblog/article/details/22501141

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容