React Native移動開發實戰-4-Android平台的適配原理,react-4-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移動開發實戰》