Android使用最小寬度限定符時最小寬度的計算


Android開發中最頭疼的問題之一就是兼容不同尺寸和分辨率的設備。這里推薦一篇總結的比較完整的《Android開發:最全面、最易懂的Android屏幕適配解決方案》。這篇文章對屏幕兼容的許多問題都做了詳述,這里只補充一點,就是關於在使用最小寬度限定符時這個最小寬度的該如何計算。

最小寬度限定符可以使用一個與屏幕像素密度無關為單位(dp)的數值區分出的不同設備,以應用不同的資源。如下圖中values-sw600dp的sw表示最小寬度,那么600dp是如何確定的呢?

舉個例子:一般情況下我們可以容易知道設備的分辨率和尺寸的參數。比如現在有平板A(分辨率1280*720px,尺寸是8inch),手機B(分辨率1920*1080px,尺寸是5.7inch),手機C(分辨率1280*720px,尺寸是5inch)。通過下面的屏幕像素密度的計算公式,我們可以分別計算出他們的屏幕像素密度:

 

平板A約為184dpi,手機B約為386dpi,手機C約為293dpi。

 

接下里需要注意的是,最小寬度是不考慮橫屏或豎屏的,也就是說最小寬度是設備屏幕四條邊里最短的那兩條邊。如果需要考慮橫豎屏那么可以加入屏幕方向限定符,這不在我們討論之列。那么接下來我們取最短邊的像素數,並通過下面的公式計算最小寬度(dp):

平板A約為626dp,手機B約為448dp,手機C約為393dp。

 

如上,使用600dp就可以區分出平板和手機兩類設備,如果需要詳細區分手機B和C可以再考慮設置sw400dp作為區分。

 

 

理論上以上方法是成立的,但是一些定制的設備是允許修改屏幕密度和最小寬度的,比如華為手機的開發者模式,以及3288的開發板,所以,真正的最小寬度還是要靠計算獲得。以下連接是計算方法

http://landcareweb.com/questions/37447/ru-he-zhi-dao-androidshe-bei-de-zui-xiao-kuan-du-sw

其實主要用到了以下類:

1 DisplayMetrics dm = mActivity.getApplicationContext()
2                     .getResources().getDisplayMetrics();
3             float screenWidth = dm.widthPixels / dm.xdpi;
4             float screenHeight = dm.heightPixels / dm.ydpi;

 或者更直接的方法

Configuration config = getResources().getConfiguration(); config.smallestScreenWidthDp

最后一行返回dp中的SW值!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM