Android螢幕適配規則,android螢幕適配
要適配不同的螢幕,首要需要的是要能夠將不同的螢幕分辨出來,android提供了若干不同的維度來進行限定(qualifier,有的翻譯為限定詞)
所示為常用的一些維度,不過不是全部,全部的維度可以在官方的列表中尋找。
圖中從左至右按照箭頭指示方向的優先順序依次降低(尋找匹配資源的時候會用到優先順序),同時在對res子目錄採用限定詞進行命名的時候,也必須按照這個優先順序進行命名,例如res-sw600dp-port是對的而res-port-sw600dp就會出現編譯錯誤。有些維度可以有很多不同的具體參數,如smallestWidth,有些只能有固定的一些選擇,如語言,螢幕方向port/land這種。
以下分別來介紹各個維度:
1、語言(zh-rCN), 主要可以用ISO 639-1標準定義的兩個字母的語言代碼
2、smallestWidth最短可用寬度(sw-<N>dp),這個是從android3.2開始加入的,表示裝置可用的最短寬度,與螢幕方向無關。但是,這個參數在使用時會涉及到螢幕上的一些組件,如果螢幕上有navigation bar等,則最短可用寬度可能並不到螢幕的最短邊的數值,因為這個參數指的是我們的UI可用的區間。
適配流程:當多個目錄都使用了該限定詞的時候,匹配原則為不大於可用寬度的最大值。即如果螢幕最短邊為1536,螢幕密度為xhdpi(即320dpi),1536/2 = 768,則在所有的sw-<N>dp中選擇小於等於768的最大值,也即向下尋找匹配。
3、available width(w-<N>dp)與smallestWidth類似,但是與螢幕方向有關,向下匹配
4、screenSize螢幕尺寸,根據螢幕對角線大小來界定(單位inch-英寸),可分為small/normal/large/xlarge。適配順序為從高到低,如果只有超過當前實際尺寸的目錄中有定義,則crash。這個維度從android3.2開始已經不建議使用,建議採用shortestWidth。
5、螢幕方向,這個是最簡單的,橫向縱向
6、Screen density螢幕密度(dots per inch),ldpi/mdpi/hdpi/xhdpi/xxhdpi分別對應的螢幕密度為120/160/240/320/480/640dpi,在放置資源的時候資源大小也要按照相應比例。(決定1dp代表多少pixel)。
適配流程:優先從當前螢幕密度匹配的目錄尋找,如果沒有則不斷向上層尋找(傾向於將大圖片縮小,而不是小圖片放大),如果上層沒有則向下層尋找,如果都沒有,才取預設的目錄,定位到特定目錄後,會根據定位到的目錄與當前螢幕密度的比例關係進行縮放操作。
7、解析度 (800*480),官方文檔上已經沒有,但目前仍可使用,優先順序介於nav和platform之間,適配順序為從高到低
8、Platform version:參見Api Levels。適配順序也是從高到低
Android資源匹配流程:
Best practice:
1、為不同的螢幕尺寸及方向提供不同的layout,dimen
2、為不同的螢幕密度dpi提供不同的drawable
3、提供預設資源防止crash
4、修改某個目錄下的值的時候,確認其上層是否有配置該參數值,如果有,則可以直接修改;如果沒有,則要將本層的值複製到上層之後再來修改本層的值
Android官方:
https://developer.android.com/guide/topics/resources/providing-resources.html
https://developer.android.com/guide/practices/screens_support.html