相比iOS平臺的適配,Android的適配工作更繁重,情況也更複雜。因為,相比相對比較封閉的蘋果,Android無論是硬體和軟體們都是開放的,所以市場上Android設備種類更多。 ...
打開Android開發工具Android Studio,選擇菜單 Open an existing AndroidStudio project,打開ch04項目的android文件夾,如圖5.8所示。
圖5.8 Android原生項目結構
從Android的項目結構,想必讀者可以隱約感受到:Android適配是基於文件夾的,不同解析度和尺寸的屏幕會自動適配相應的文件夾下的佈局或資源文件。但是,想要進一步理解Android的適配,有必要先瞭解Android適配的一些基本概念:
- 屏幕尺寸:屏幕尺寸是指手機屏幕對角線的英寸數。
- 屏幕解析度:屏幕解析度是指屏幕寬高像素數。
- 屏幕像素密度:屏幕像素密度是指手機屏幕對角線上單位英寸內的像素數。
另外,編寫代碼時常用的尺寸單位有:
- px:像素。
- dp(dip的縮寫):規定密度為160的屏幕上,1像素對應的尺寸為1dp。320密度的屏幕上,1像素對應0.5dp,以此類推。在密度為160的屏幕上,1英寸有160個像素,那麼
- px對應的尺寸=1/160英寸。所以說dp是個物理尺寸,跟像素無關。所以,100dp的尺寸在不同手機上顯示出來,物理尺寸看上去基本是一樣的。
- sp(Scale-independentPixel),即與縮放無關的抽象像素。sp和dp很類似但唯一的區別是,Android系統允許用戶自定義文字尺寸大小(小、正常、大、超大等等),當文字尺寸是“正常”時,1sp=1dp=0.00625英寸,而當文字尺寸是“大”或“超大”時,1sp>1dp=0.00625英寸。
在創建項目的時候,會自動創建不同的mipmap或layout文件夾(在不同像素密度上提供不同的圖片),文件夾的尾碼表明瞭該佈局或資源的像素密度(dp)範圍,對應關係如下參見5.1。
表5.1 Android文件夾尾碼命名與像素密度(dp)範圍的對應關係
尾碼 |
像素密度(dp)的範圍 |
mdpi |
120dp ~ 160dp |
hdpi |
160dp ~ 240dp |
xhdpi |
240dp ~ 320dp |
xxhdpi |
320dp ~ 480dp |
xxxhdpi |
480dp ~ 640dp |
對於上述Android項目中的mipmap文件夾,Android的適配機制是這樣的:系統會先到尾碼與設備匹配的mipmap目錄下找對應的圖片,當找不到的時候會去“更高”一級的目錄去找,再找不到,繼續往高一級的找,如果還是找不到就退而求其次去低一級的找,依次類推。
例如:在密度為xxhdpi的手機上運行Android App,首先會在drawable-xxhdpi目錄下尋找圖片資源,找不到再去drawable-xxxhdpi找,如果沒有比drawable-xxxhdpi更高的,則再找不到就去drawable-xhdpi找,接著drawable-hdpi,直到找到對應的圖片資源,當找到後,系統會按密度對圖片做縮放處理,然後再顯示到屏幕上,所以如果圖片放的目錄不正確的話,有可能造成圖片因縮放而變得模糊。
同樣,用於存放佈局文件的layout目錄也是通過尾碼名來適配的,只不過layout文件夾通常添加設備解析度作為尾碼,如:layout-1280x720、layout-1920x1080以及layout-land-1280x720等。
不難看出,以上適配方法和上述iOS開發中的Size Class是類似的:用於分類適配.
和我一起學吧,《React Native移動開發實戰》