Android - UI適配

屏幕適配

尺寸概念解釋
Dimensions - Google

android中的dp在渲染前會(huì)將dp轉(zhuǎn)為px,計(jì)算公式:

 px = density * dp;
 density = dpi / 160;
=>
 px = dp * (dpi / 160);

寬高限定符適配

  1. 設(shè)定基準(zhǔn)分辨率
  2. 計(jì)算不同分辨率下的dp
// 例如:
1. 基準(zhǔn)分辨率寬度為375dp
2. 需要適配的分辨率寬度為1080dp
以基準(zhǔn)分辨率的設(shè)計(jì)稿為1dp的長(zhǎng)度時(shí),1080分辨率的設(shè)備需要設(shè)置為1080/375=2.87dp

缺點(diǎn)

這個(gè)方案有一個(gè)致命的缺陷,那就是需要精準(zhǔn)命中才能適配,比如1920x1080的手機(jī)就一定要找到1920x1080的限定符,否則就只能用統(tǒng)一的默認(rèn)的dimens文件了。而使用默認(rèn)的尺寸的話,UI就很可能變形,簡(jiǎn)單說(shuō),就是容錯(cuò)機(jī)制很差。

Note: The system chooses the resource that matches both in width and height. Therefore a resource that specifies both is strongly preferred over one that specifies only one or the other. For example, if the actual screen is 720 dp wide by 1280 dp high and one resource is qualified with w720dp and another is qualified as w700dp-h1200dp, the latter is chosen even though the former is an exact match for what it specifies.

Smallest-Width - SW限定符適配

原理和寬高限定符適配的方案是一致的

指的是Android會(huì)識(shí)別屏幕可用高度和寬度的最小尺寸的dp值(其實(shí)就是手機(jī)的寬度值),然后根據(jù)識(shí)別到的結(jié)果去資源文件中尋找對(duì)應(yīng)限定符的文件夾下的資源文件。

優(yōu)點(diǎn)

  • 非常穩(wěn)定,極低概率出現(xiàn)意外
  • 不會(huì)有任何性能的損耗
  • 適配范圍可自由控制,不會(huì)影響其他三方庫(kù)
  • 在插件的配合下,學(xué)習(xí)成本低

缺點(diǎn)

  • 侵入性高,在所有地方都需要引用。
  • 還是沒有辦法覆蓋所有的機(jī)型分辨率,部分機(jī)型可能適配效果還是不佳
  • 不能以高度為基準(zhǔn)進(jìn)行適配
  • 生成很多文件,增大APP體積1~2M

修改系統(tǒng)Density

默認(rèn)px = density * dp,也就是屏幕總寬度dp = 屏幕寬度px / density
這個(gè)時(shí)候我們假設(shè)所有設(shè)備上的屏幕總寬度dp會(huì)等于我們?cè)O(shè)計(jì)圖375dp,那么可以得出一個(gè)公式:

density = 屏幕寬度px / 設(shè)計(jì)圖寬度(375dp)

通過系統(tǒng)api,將density賦值給系統(tǒng),拋棄掉系統(tǒng)默認(rèn)計(jì)算density的計(jì)算公式

優(yōu)點(diǎn)

  • 使用成本非常低,操作非常簡(jiǎn)單
  • 侵入性非常低
  • 可適配三方庫(kù)的控件和系統(tǒng)的控件

缺點(diǎn)

  • 會(huì)全局影響APP的控件大小,例如: 一些第三方庫(kù)控件,他們?cè)O(shè)計(jì)的時(shí)候可能設(shè)計(jì)圖尺寸并不是像我們一樣是375dp,這樣就會(huì)導(dǎo)致控件大小變形等一些問題。

參考文章

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

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

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