Android 屏幕適配

Android 屏幕適配

一、屏幕適配的常用概念:

1: dp: android 尺寸的基本單位。 在不同的分辨率的手機里面,1dp對應(yīng)著不同數(shù)量的px, 這樣就實現(xiàn)了dp定義一個控件大小的時候,在不同分辨率手機里表現(xiàn)出相應(yīng)大小的像素值。
2: 屏幕分辨率: 1080下160, 表示寬度有1080個像素點而高度有2160個像素點。常見的分辨率有320x480, 480x800, 720x1280, 1080x1920等。
3: 屏幕尺寸: 以寸為單位, Android設(shè)備對角線的長度
4: 像素密度: 每英寸的像素點
5: 屏幕尺寸, 分辨率,像素密度 三者之間的關(guān)系:
密度(dpi)= √(寬2 + 高2)/屏幕尺寸

 1: 勾股定理求出對角線的像素尺寸
 2: 除以屏幕尺寸即可以得到每寸的像素, 即為像素密度

6: px:像素,是屏幕上顯示數(shù)據(jù)的最基本的點
7: dpi:屏幕像素密度,每英寸上的像素點數(shù)
8: sp:與dp類似,通常用于指定字體的大小,當用戶修改手機顯示的字體時,字體大小會隨之改變。

二、 屏幕適配的幾種方式:

1: dp適配方案: Android自帶的原始的適配方案, 在不同的分辨率手機里面表現(xiàn)出相應(yīng)大小的像素點。
缺點: Android的碎片化嚴重, 如果生產(chǎn)廠家沒有根據(jù)屏幕尺寸、分辨率和像素密度的關(guān)系來規(guī)則定義, 或者出一些亂七八糟的屏幕大小,這樣的適配方案就不在適合了。

2: 寬高限定符:枚舉所有的屏幕寬高像素值,根據(jù)等比縮放去適配。如果沒有找到對應(yīng)的屏幕, 則取默認的。 目前這種方案已經(jīng)被棄用。

1: 首先設(shè)定一個基準屏幕, 如320x480為基準。那么所有的屏幕,寬都會被分成320份, 高被分成480份。 x1 = 1px, x2= 2px ... x320 = 320px; h1 = 1px, h2 = 2px... h480 = 480px。
2;確定需要適配的屏幕: 如480x800, 那么此屏幕寬高會同樣被分成320份, 高被分成480份, 每份的寬高為: x1= 1.5px, x2= 3px,...,x320=480px; h1=2.0px,h2 = 4.0px ... h480 = 800px。
3:使用工具生成: autoLayout.jar
4: java -jar autoLayout.jar width height width,height_width,height
如: java -jar autoLayout.jar 1888 1728 2560 1600
以1888x1728為基準, 需要適配的屏幕為2560x1600的屏幕

缺點:
1: 占用資源大,會增加APK的體積。
2: 容錯機制大需要精準命中資源文件才能適配,比如1920x1080的手機就一定要找到1920x1080的限定符,否則就只能用統(tǒng)一的默認的dimens文件了。而使用默認的尺寸的話,UI就很可能變形。

3:AndroidAutoLayout適配方案(停止維護)

1: 引入框架implementation 'com.zhy:autolayout:1.4.5'
2: AndroidManifest中配置文件注明設(shè)計的尺寸:
<meta-data android:name="design_width" android:value="720" />
<meta-data android:name="design_height" android:value="1280" />
3: 轉(zhuǎn)換引入的布局的形態(tài):
LinearLayout -> AutoLinearLayout
RelativeLayout -> AutoRelativeLayout
FrameLayout -> AutoFrameLayout
在布局里面聲明控件,單位全部為px

4: SW限定符適配方案:(smallestWidth最小寬度適配)
Android 會去識別屏幕可用高度或者寬度的最小尺寸的dp值。然后根據(jù)識別到的結(jié)果去對應(yīng)的資源文件里面去找尋相應(yīng)的結(jié)果。
如何生成:ScreenMatch插件

1: File -> Settings -> Plugins ,搜索ScreenMatch關(guān)鍵字,安裝插件
2: 項目values文件夾下需要一份dimens.xml文件,即前面說的默認基準尺寸文件
3: 根據(jù)基準尺寸文件,執(zhí)行screen match操作
4:執(zhí)行此插件會生成screenMatch.properties的文件, 里面base_dp會指定最小寬度基準值,match_dp會生成適配寬度的的dimens.xml的文件, ignore_dp會忽略哪些對應(yīng)的寬度

此方案跟寬高限定的適配方案相比,有很好的容錯機制, 如果沒有找到對應(yīng)的適配寬度, 那么會在vlues文件里面去找跟他最接近的寬度。

5:今日頭條適配方案:
1>: px 轉(zhuǎn) dp 的公式 dp = px / density.不管我們設(shè)定的單位是什么, 最終我們都會將這些單位長度轉(zhuǎn)化為px的。density就是他們的轉(zhuǎn)化比, 所以,動態(tài)改變這個轉(zhuǎn)化比也是可以達到我們適配屏幕的目的的。
2>: 通過修改density值,強行把所有不同尺寸分辨率的手機的寬度dp值改成一個統(tǒng)一的值(在清單文件中定義),這樣就解決了所有的適配問題。
3>: Density = 當前設(shè)備屏幕總寬度(單位為像素)/ 設(shè)計圖總寬度(單位為 dp) ;
4>:引入了AndroidAutoSize屏幕適配框架:
https://github.com/JessYanCoding/AndroidAutoSize

1: 引入 implementation 'me.jessyan:autosize:1.1.2'
2: 如果您項目中的所有頁面都只需要以高或?qū)捴械囊粋€作為基準進行適配的話, 那就只需要填寫高或?qū)捴械囊粋€設(shè)計圖尺寸即可
<meta-data android:name="design_width_in_dp"
android:value="360"/>
<meta-data android:name="design_height_in_dp"
android:value="640"/>`

最后, 最重要的................
點贊 點贊 點贊, 不重要的事情也就說3遍......

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容