1. 程式人生 > >Android適配手機與平板螢幕尺寸

Android適配手機與平板螢幕尺寸

一.劃分手機和平板

人為判斷方法:

大於6英寸的就是平板。小於6英寸的都是手機
平板尺寸:
6英寸、7英寸、10英寸、14英寸…

Android系統支援多配置資原始檔,我們可以追加新的資源目錄到你的Android專案中。命名規範: 資源名字-限制符

layout/drawble資料夾 說明
layout 預設中等螢幕
layout-small 小螢幕
layout-large 大螢幕
layout-xlarge 特大螢幕
layout-land 橫屏
layout-port 豎屏
drawable 預設中等密度
drawable-hdpi 高密度 240dpi
drawable-mdpi 中等密度 160dpi
drawable-xhdpi 更高密度 ~320dpi
drawable-nodpi 所有密度資源,無論什麼密度螢幕都會適配
drawable-tvdpi 介於mdpi~hdpi 約213dpi 主要應用在電視

官方說明:

xlarge screens are at least 960dp x 720dp
large screens are at least 640dp x 480dp
normal screens are at least 470dp x 320dp
small screens are at least 426dp x 320dp

上面是定義廣義大小布局資源適配的一個範圍,大家可以根據自己的裝置知道系統會匹配那個檔案的佈局。
如果手上有個山寨華為的賣的比較火的mediapad,大家知道解析度1280*800 密度尺寸7寸
通過勾股定了和解析度可以得出其密度為215.69。然後根據dp=px/(dpi/160),可以得出個範圍593.471。所以這個裝置系統會匹配layout-large這個資源佈局檔案。

注:如果沒有指定橫屏或豎屏,則上面的佈局和點陣圖都適配橫豎屏。如果要指定橫屏,例如:drawable-land-hdpi豎屏drawable-port-hdpi,還有關鍵是drawable-xlarge和layout-xlarge,對api level都要求在9之上,等於說,你用android2.2系統的平板或者手機根本不匹配layout-xlarge。因為api level是8。drawable-tvadpi這個api等級需要13以上。
layout-large這個目錄其實是個範圍。當系統根據當前螢幕的大小和密度,決定程式應該匹配那個目錄。你也可以單獨定製某些不符合谷歌標準的山寨版layout-l024x600(中間的符合是英文下的x字母),其中1024和600的單位是dp。你可以根據你裝置的解析度和密度,來判斷你的裝置需要定義那個檔案。

但是,官方推薦使用尺寸來表示資源layout-large,不推薦使用解析度layout-1024*600

運用場景:

為了同時適配手機和平板。
我們在res/目錄下建立,layout-large和layout的package,然後我們可以建立一個與layout下相同的activity_main.xml檔案
,系統就會根據螢幕解析度匹配指定的layout中的xml

二.平板-tablet

Android手機系統是2.x,4.x,5.x等,但是Android系統的Tablet裝置是從3.0開始的,且3.x系統只有平板才有。Android3.0是專門為平板服務的系統。但是從4.0以後,看起來能運行於手機的也同樣能運行於平板。但是,如果使用手機適配的方法用於平板是不可行的。通過查詢Google文件可知,Android平板的適配要使用限定符swxxxdp。

原因:手機螢幕的適配是根據資源限定符value-mdpi-xxx或者value-ldpi-xxx。在values資料夾下的dimens檔案裡沒有預設值也沒有關係,系統會最匹配原則。但是Tablet裝置資源查詢的限定符不是mdpi、ldmpi這樣的限定符。而是swxxxdp限定符查詢。所以如果使用手機螢幕適配的方法來適配,系統不認識mdpi資料夾下的尺寸,會去找values資料夾下的dimens檔案裡的尺寸。沒有找到swxxxdp也沒有找到預設尺寸,就會報資源找不到異常。

三.螢幕尺寸限定符sw

這裡寫圖片描述
對於Android3.0的平板,宣告平板Tablet的正確方式是將資源放在有xlarge配置限定符的目錄,本質上是使用螢幕尺寸限定符,例如res/layout-xlarge/。為適應多螢幕尺寸,Android3.2引入了更具體的螢幕尺寸指定資源的方式。
裝置Tablet在3.0系統時可以使用螢幕限定符small、normal、large、xlarge等命名備用資源,從3.2以後,Tablet使用新的限定符smallestWidth,限定符值為swdp。

選擇一個寬度並將其設計為最小尺寸(基本上這個最小寬度要跟ui溝通好,可用ui的設計基準作為最小寬度),或者在佈局設計玩完成後測試其支援的最小寬度。

swdp:最小寬度限定符。

例如:(取兩個尺寸的最短者)

裝置1024x480mdpi=sw480dp

裝置1024x600mdpi=sw600dp

裝置480x600mdpi =sw480dp

裝置480x640mdpi=sw480dp

裝置2560x1440mdpi=sw1440dp

sw480dp:中間平板電腦,例如Streak(480x800mdpi)

sw600dp:7英寸平板電腦(600x1024mdpi)

sw720dp:10英寸平板電腦(720x1280mdpi、800x1280mdpi等)

下面附上Android中解析度,DPI,DP與PX對應關係
寬×高(標準值) 240×320 320×480 480×800 720×1280 1080×1920 1440×2560
DPI等級 LDPI MDPI HDPI XHDPI XXHDPI XXXHDPI
DPI數值 120 160 240 320 480 640
對應比例 3 4 6 8 12 16
1DP=?PX 0.75 1 1.5 2 3 4
綜上得出:

dp*ppi/160=px 比如ppi=240,1920*1200的swDP=sw(1200/(240/160))=sw800dp

例子:layout-sw600dp、layout-w600dp和layout-h600dp的區別

一、layout-sw600dp

這裡的sw代表smallwidth的意思,當你的螢幕的絕對寬度大於600dp時,螢幕就會自動呼叫layout-sw600dp資料夾裡面的佈局。
注意:這裡的絕對寬度是指手機的實際寬度,即與手機是否橫屏沒關係,也就是手機較小的邊的長度

二、layout-w600dp

當你的螢幕的相對寬度大於600dp時,螢幕就會自動呼叫layout-w600dp資料夾裡面的佈局。
注意:這裡的相對寬度是指手機相對放置的寬度;即當手機豎屏時,為較小邊的長度;當手機橫屏時,為較長邊的長度。

三、layout-h600dp

與layout-w600dp的使用一樣,只是這裡指的是相對的高度。
當你的螢幕的相對高度大於600dp時,螢幕就會自動呼叫layout-w600dp資料夾裡面的佈局。

注意:這裡的相對高度是指手機相對放置的高度;即當手機豎屏時,為較長邊的長度;當手機橫屏時,為較小邊的長度。但這種方式很少使用,因為螢幕在相對高度上,即在縱向上通常能夠滾動導致長度變化,而不像橫向那樣基本固定,因而這個方法靈活性差,google官方文件建議儘量使用這種方式,這裡的單位必須是dp單位。資源使用“最小寬度限定符”swdp用於指定螢幕兩邊的最小值,而不管裝置當前的方向如何。因此使用swdp是指定 佈局可用於整體螢幕尺寸的簡便方法,它會忽略螢幕的方向。ps:當橫豎屏切換時,width和height值也會交換。。

總結:

平板的適配基準sw480dp、sw600dp、sw720dp等,手機螢幕的適配基準是mdpi、hdpi、xhdpi等。