原文地址: http://www.lxweimin.com/p/f770ef8410a0
以下是 騷年你的屏幕適配方式該升級了! 系列文章,歡迎轉(zhuǎn)發(fā)以及分享:
- 騷年你的屏幕適配方式該升級了!(一)-今日頭條適配方案
- 騷年你的屏幕適配方式該升級了!(二)-SmallestWidth 限定符適配方案
- 今日頭條屏幕適配方案終極版正式發(fā)布!
- 為什么說 AndroidAutoLayout 的設(shè)計(jì)有問題
加入技術(shù)交流 QQ 群 455850365
很多人覺得屏幕適配框架,就是應(yīng)該按照設(shè)計(jì)圖尺寸,高和寬等比例拉伸頁面并且填充滿屏幕,百分百的還原設(shè)計(jì)圖的布局效果。
這難道不對嗎?
像 AndroidAutoLayout 這種框架,可以做到設(shè)備運(yùn)行效果和設(shè)計(jì)圖一模一樣,才是真正的百分比屏幕適配框架啊。
?
而像 今日頭條屏幕適配方案 和 SmallestWidth 屏幕適配方案 這種,只能以寬或者高中的一個作為基準(zhǔn)進(jìn)行屏幕適配的方案,明顯是不科學(xué),體驗(yàn)極差的方案啊。
但是我可以明確的告訴大家,上面的理解是非常片面的,AndroidAutoLayout 這樣的設(shè)計(jì)反而是錯誤的,至少在當(dāng)下這個時(shí)代是錯誤的。
AndroidAutoLayout 這樣的設(shè)計(jì)只能適配舊時(shí)代的設(shè)備,但不能適配新時(shí)代的適配,那為什么會這樣呢?
因?yàn)?AndroidAutoLayout 默認(rèn)所有設(shè)備的高寬比都和設(shè)計(jì)圖的高寬比一致,所以 AndroidAutoLayout 可以放心大膽的將頁面的高和寬同時(shí)進(jìn)行等比例拉伸以填滿整個屏幕。
但是在這個全面屏手機(jī)普及的時(shí)代,怎么可能只有 16 :9 這一種高寬比的屏幕?于是 AndroidAutoLayout 開始水土不服了。
只要手機(jī)屏幕的高寬比不是 16 :9,AndroidAutoLayout 的屏幕適配就會出現(xiàn)問題,導(dǎo)致 View 嚴(yán)重變形。
AndroidAutoLayout 在任何屏幕上,頁面的高和寬都可以完美填充屏幕,但只要設(shè)備的屏幕高寬比和設(shè)計(jì)圖的高寬比不一致(設(shè)計(jì)圖的高寬比一般為 16 :9), View 就會嚴(yán)重變形,看下圖,在 18 : 9 的設(shè)備上,正方形的 View 已經(jīng)變成了長方形。
也就是說 AndroidAutoLayout 在任何尺寸的屏幕上,讓頁面的高和寬都可以完美填充屏幕的代價(jià),就是讓 View 在屏幕高寬比和設(shè)計(jì)圖高寬比不一致的設(shè)備上嚴(yán)重變形。
其實(shí)這個代價(jià)我們也能理解,一個正方形的設(shè)計(jì)圖除了以犧牲等比例拉伸為代價(jià),又如何能做到填充滿一個長方形的屏幕呢。
但像 今日頭條屏幕適配方案 和 SmallestWidth 屏幕適配方案 這種,以寬或者高中的一個作為基準(zhǔn)進(jìn)行屏幕適配的方案,就是完美的屏幕適配方案嗎?
也不是。
這種方案雖然可以解決 View 在不同高寬比的屏幕上變形的問題,但是卻會導(dǎo)致當(dāng)以寬為基準(zhǔn)時(shí),頁面的高會超出,或低于屏幕高度,當(dāng)以高為基準(zhǔn)時(shí),頁面的寬會超出,或窄于屏幕寬度。
看下圖,在 18 : 9 的設(shè)備上,正方形 View 雖然沒有變形,但是頁面卻和屏幕底部間隔了 240 px。
但是現(xiàn)在大部分頁面都會使用到 RecyclerView 來展示內(nèi)容,所以只用保證高或?qū)捴械囊粋€完全和設(shè)計(jì)圖一致即可,因此這個問題也就被弱化了。
目前沒有一個屏幕適配方案可以完美的解決所有問題,AndroidAutoLayout、今日頭條屏幕適配方案 和 SmallestWidth 屏幕適配方案,都有各自的問題,但是 AndroidAutoLayout 的問題明顯要比 今日頭條屏幕適配方案 和 SmallestWidth 屏幕適配方案 影響更大,不能等比例拉伸,有如何稱為百分比屏幕適配方案呢,所以這是我建議使用后者的原因。
客觀來說百分比屏幕適配方案,并不是適配效果最完美的解決方案,它只是幫助你用最低的成本去完成屏幕適配,在適配成本和適配效果中不斷權(quán)衡,取舍出一個折中的方案,才是百分比屏幕適配方案最核心的理念,如果你極度追求 APP 在每個設(shè)備上的適配效果,那就得花費(fèi)更大的精力,自行去對每個設(shè)備做更精細(xì)化的屏幕適配。
以后不要再問我,使用 AndroidAutoSize 后,頁面為什么和屏幕有間隔,和設(shè)計(jì)圖的效果不一致了,這個問題已經(jīng)把我問傷了,這次我通過畫圖的方式,你們應(yīng)該更能理解。
公眾號
搜索關(guān)注我的公眾號 JessYan,一起學(xué)習(xí)進(jìn)步,如果框架有更新,我也會在公眾號上第一時(shí)間通知大家
以下是 騷年你的屏幕適配方式該升級了! 系列文章,歡迎轉(zhuǎn)發(fā)以及分享:
- 騷年你的屏幕適配方式該升級了!(一)-今日頭條適配方案
- 騷年你的屏幕適配方式該升級了!(二)-smallestWidth 限定符適配方案
- 今日頭條屏幕適配方案終極版正式發(fā)布!
- 為什么說 AndroidAutoLayout 的設(shè)計(jì)有問題
Hello 我叫 JessYan,如果您喜歡我的文章,可以在以下平臺關(guān)注我
- 個人主頁: http://jessyan.me
- GitHub: https://github.com/JessYanCoding
- 掘金: https://juejin.im/user/57a9dbd9165abd0061714613
- 簡書: http://www.lxweimin.com/u/1d0c0bc634db
- 微博: http://weibo.com/u/1786262517
-- The end