關(guān)鍵點:設(shè)計圖與App界面的轉(zhuǎn)換席覆,分辨率是核心問題
dp適配:
官方提供工具,后續(xù)的解決方案也是以此為基礎(chǔ);
公式:px = dp(dpi/160)
dpi是像素密度姆泻,軟件概念上的值火窒,但可能不同尺寸的相同分辨率手機會有不一樣的值硼补,這也導(dǎo)致了這套方案會有少部分手機適配不了
寬高限定符適配
窮舉市面所有手機寬高像素值
設(shè)定基準(zhǔn)分辨率(一般是設(shè)計稿尺寸),并在其他尺寸編寫對應(yīng)dimens文件
致命問題:必須精準(zhǔn)命中熏矿,容錯差
sw限定符適配
根據(jù)橫向dp值尋找對應(yīng)資源文件
該方案關(guān)鍵在于系統(tǒng)在查詢不到對應(yīng)dp文件夾時已骇,會自動向下尋找最近的dp文件夾
相比起下面的方案离钝,這套方案更加可控,擴展也方便疾捍,比較適合提供獨立服務(wù)的項目使用
配置限定符
常用限定符
- 語言和區(qū)域:en, fr, en-rUS 等等
- smallestWidth:sw<N>dp 如:sw320dp, sw600dp, sw720dp 等等奈辰,屏幕可用高度和寬度的最小尺寸,屏幕的“最小可能尺寸”乱豆。
- 屏幕方向:port 設(shè)備處于縱向(垂直)奖恰,land 設(shè)備處于橫向(水平)
- 屏幕像素密度:ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi, tvdpi
注:這些限定符必須遵循上面列出的順序,所以上面的列表是有順序的宛裕。例如:錯誤:drawable-hdpi-port/瑟啃,正確:drawable-port-hdpi/
mipmap和drawable
mipmap 文件夾下,僅僅建議放啟動圖標(biāo) (app launcher icons)揩尸,也就是應(yīng)用安裝后蛹屿,會顯示在桌面的那個圖標(biāo),而其他的圖片資源等岩榆,還是按照以前方式错负,放在 drawable 文件夾下。
在應(yīng)用安裝時 Android 資源優(yōu)化會把 drawable 文件夾下不需要的分辨率資源刪除掉勇边;Android 會保證 mipmap 下的資源不會因為資源優(yōu)化而被刪除犹撒,確保大尺寸的 Launcher Icon 可以找到更合適分辨率的 Icon。
今日頭條適配方案
通過修改density值粒褒,強行把所有不同尺寸分辨率的手機的寬度dp值改成一個統(tǒng)一的值识颊,這樣就解決了所有的適配問題,缺點在于如果是提供獨立服務(wù),會直接影響到使用服務(wù)的應(yīng)用奕坟,老業(yè)務(wù)的修改成本也會很大
比如祥款,設(shè)計稿寬度是360px,那么開發(fā)這邊就會把目標(biāo)dp值設(shè)為360dp月杉,在不同的設(shè)備中刃跛,動態(tài)修改density值,從而保證(手機像素寬度)px/density這個值始終是360dp,這樣的話沙合,就能保證UI在不同的設(shè)備上表現(xiàn)一致了奠伪。
這個方案侵入性很低,而且也沒有涉及私有API首懈,應(yīng)該也是極不錯的方案绊率,我暫時也想不到強行修改density是否會有其他影響,既然有今日頭條的大廠在用究履,穩(wěn)定性應(yīng)當(dāng)是有保證的滤否。