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值!