天天看點

Android 适配時資源限定符的說明

多說幾句:

之前由于沒有仔細研究适配,一直認為android不是有dpi麼,隻要保證mdpi等等的值設定好且正确就可以做到适配。但是在近期的項目中,需要适配平闆和手機。計算了平闆和手機,dpi都是屬于xhdpi的,但是效果展示相差很大。還再納悶,不是說dp可以自己根據螢幕大小調整适配麼?經過查閱資料發現:在螢幕 尺寸相差不大的情況下,dp可以使不同分辨率的裝置上展示效果相似。但是在螢幕尺寸相差比較大的情況下,dp就失去了這種效果。是以需要以下的限定符來限制,采用多套布局,數值等方式來适配。

原文位址:http://blog.csdn.net/wzy_1988/article/details/52932875

寫的挺詳細的。原作者辛苦了。但是為了友善查閱。我把重要的表格摘錄出來了。有不明白的去檢視原文。

在安卓3.2之下的适配  限定符

螢幕特性 限定符 描述
螢幕尺寸 small 小螢幕
normal 基準螢幕
large 大螢幕
xlarge 超大螢幕
螢幕密度 ldpi <=120dpi
mdpi <= 160dpi
hdpi <= 240dpi
xhdpi <= 320dpi
xxhdpi <= 480dpi
xxhdpi <= 640dpi(隻用來存放icon)
nodpi 與螢幕密度無關的資源.系統不會針對螢幕密度對其中資源進行壓縮或者拉伸
tvdpi 介于mdpi與hdpi之間,特定針對213dpi,專門為電視準備的,手機應用開發不需要關心這個密度值.
螢幕方向 land 橫向
port 縱向
螢幕寬高比 long 比标準螢幕寬高比明顯的高或者寬的這樣螢幕
notlong 和标準螢幕配置一樣的螢幕寬高比

例如:

res/layout/my_layout.xml              // layout for normal screen size ("default")
res/layout-large/my_layout.xml        // layout for large screen size
res/layout-xlarge/my_layout.xml       // layout for extra-large screen size
res/layout-xlarge-land/my_layout.xml  // layout for extra-large in landscape orientation

res/drawable-mdpi/graphic.png         // bitmap for medium-density
res/drawable-hdpi/graphic.png         // bitmap for high-density
res/drawable-xhdpi/graphic.png        // bitmap for extra-high-density
res/drawable-xxhdpi/graphic.png       // bitmap for extra-extra-high-density

res/mipmap-mdpi/my_icon.png         // launcher icon for medium-density
res/mipmap-hdpi/my_icon.png         // launcher icon for high-density
res/mipmap-xhdpi/my_icon.png        // launcher icon for extra-high-density
res/mipmap-xxhdpi/my_icon.png       // launcher icon for extra-extra-high-density
res/mipmap-xxxhdpi/my_icon.png      // launcher icon for extra-extra-extra-high-density
           

android3.2之後引入的,目前推薦使用的;

螢幕特性 限定符 描述
最小寬度限定符

sw<N>dp

例如sw600dp, sw720dp

螢幕的最小尺寸,就是螢幕可用區域的最小尺寸,是指螢幕可用高度或寬度的最小值(你可以預設是螢幕的最小寬度).你能用這個限定符確定,無論螢幕方向如何,這個限定符修飾下的布局需要的螢幕最小尺寸是Ndp.

例如,如果你的布局在運作時需要的最小螢幕寬度是600dp,則你可以利用這個限定符建立布局資源目錄res/layout-sw600dp.隻有當螢幕的最小寬度或最小高度是600dp時,系統才會使用這些布局檔案或者資源檔案.最小螢幕寬度是固定裝置的特有螢幕尺寸,當螢幕方向發生變化時,裝置的最小寬度值不變.

裝置的最小寬度值要考慮螢幕的尺寸和系統UI.例如,如果在螢幕上有一些系統持久化UI元素,則系統的最小寬度值要比實作的螢幕尺寸小一些,因為這些系統的UI元素你的應用是無法使用到的.

當你使用之前的廣義限定符是,你可以定義連續的一系列限定符.用最小寬度來決定廣義螢幕尺寸是有意義的,是因為寬度是影響你UI設計的關鍵因素.UI在豎直方向上會經常滾動,但是在水準方向上往往是固定的布局.可見不論是适配手機或者平闆,寬度往往都是布局的關鍵因素.是以,你需要關心你手機上的最小寬度值.

螢幕可用寬度

w<N>dp

Examples:

w720p

w1024p

指定資源使用時需要的最小寬度.當螢幕方向發生變化時,系統會調整這個值,使其始終為你UI顯示的寬度.

這個屬性經常被用來判斷目前是否需要顯示多屏布局,因為哪怕使用者目前正在使用平闆,你也可能不希望使用者在平闆豎屏時顯示多個螢幕的布局樣式.這時,你就可以使用這個限定符來标明你布局需要的最小寬度

螢幕可用高度

h<N>dp

Examples:

h720dp

h1024dp

etc.

标明資源使用時需要的最小高度.當螢幕發生旋轉時,系統會自動選擇目前大的一方作為高度值.大部分應用很少需要這個限定符,是以不做過多講解

在不考慮螢幕方向隻關注布局最小空間的前提下,使用sw<N>的方式更加簡單.

例如:

res/layout/main_activity.xml #手機布局 
res/layout-sw600dp/main_activity.xml #7寸平闆布局 
res/layout-sw720dp/main_activity.xml #10寸平闆布局
           

再補充一點:

裝置寬度的dp計算方法:

dp = 螢幕像素寬度/(螢幕像素密度/160)   160是基準螢幕像素密度    這個用來計算以上的sw後面的數值

通用公式:

dp = px/(dpi/160)

px = dp*(dpi/160)