Android開發中最頭疼的問題之一就是兼容不一樣尺寸和分辨率的設備。這裏推薦一篇總結的比較完整的《Android開發:最全面、最易懂的Android屏幕適配解決方案》。這篇文章對屏幕兼容的許多問題都作了詳述,這裏只補充一點,就是關於在使用最小寬度限定符時這個最小寬度的該如何計算。android
最小寬度限定符可使用一個與屏幕像素密度無關爲單位(dp)的數值區分出的不一樣設備,以應用不一樣的資源。以下圖中values-sw600dp的sw表示最小寬度,那麼600dp是如何肯定的呢?web
舉個例子:通常狀況下咱們能夠容易知道設備的分辨率和尺寸的參數。好比如今有平板A(分辨率1280*720px,尺寸是8inch),手機B(分辨率1920*1080px,尺寸是5.7inch),手機C(分辨率1280*720px,尺寸是5inch)。經過下面的屏幕像素密度的計算公式,咱們能夠分別計算出他們的屏幕像素密度:ui
平板A約爲184dpi,手機B約爲386dpi,手機C約爲293dpi。spa
接下里須要注意的是,最小寬度是不考慮橫屏或豎屏的,也就是說最小寬度是設備屏幕四條邊裏最短的那兩條邊。若是須要考慮橫豎屏那麼能夠加入屏幕方向限定符,這不在咱們討論之列。那麼接下來咱們取最短邊的像素數,並經過下面的公式計算最小寬度(dp):3d
平板A約爲626dp,手機B約爲448dp,手機C約爲393dp。code
如上,使用600dp就能夠區分出平板和手機兩類設備,若是須要詳細區分手機B和C能夠再考慮設置sw400dp做爲區分。blog
理論上以上方法是成立的,可是一些定製的設備是容許修改屏幕密度和最小寬度的,好比華爲手機的開發者模式,以及3288的開發板,因此,真正的最小寬度仍是要靠計算得到。如下鏈接是計算方法資源
http://landcareweb.com/questions/37447/ru-he-zhi-dao-androidshe-bei-de-zui-xiao-kuan-du-sw開發
其實主要用到了如下類:get
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值!