3.15更新,項(xiàng)目上線后硝训,在華為某些機(jī)型上出現(xiàn)了崩潰的情況
原因是高分辨率的圖片放置到了低dpi的drawable文件夾中的,對(duì)應(yīng)就是我們的drawable-long文件夾楞卡,但為什么其他機(jī)型不會(huì)出問題呢柏副?我摸索了一下,發(fā)現(xiàn)這臺(tái)華為機(jī)型被用戶調(diào)節(jié)了顯示設(shè)置
這里顯示大小調(diào)大了道川,相當(dāng)于把屏幕的dpi調(diào)小了午衰,從而加載drawable-long中的圖片時(shí)會(huì)把圖片放大,導(dǎo)致bitmap too large的問題冒萄。
一般別的機(jī)型只能調(diào)節(jié)字體大小臊岸,但無奈華為市場份額較高,肯定要兼容尊流,所以這種方案不能用了帅戒。
我的解決方法是用回9.png的方案,之前測試不成功是因?yàn)樽约褐谱?.png圖的時(shí)候底部和右邊的線畫錯(cuò)了奠旺,導(dǎo)致顯示區(qū)域出現(xiàn)問題蜘澜,重新制作就好了。
原文
眾所周知响疚,安卓不同機(jī)型的屏幕尺寸千差萬別鄙信,百花齊放,但在很長一段時(shí)間里忿晕,安卓手機(jī)屏幕的長寬比大致都在16:9上下浮動(dòng)装诡。所以我們之前做APP啟動(dòng)圖的時(shí)候,設(shè)計(jì)往往只會(huì)出一張16:9的圖給我們践盼,在不同機(jī)型上不會(huì)有太明顯的拉伸效果鸦采。
直到出現(xiàn)了全面屏的機(jī)型,特別是屏幕比例在2:1以上的機(jī)型咕幻,如果還是用一張16:9的圖去顯示渔伯,那么拉伸效果是很明顯的,我以微信的啟動(dòng)圖為例子肄程,在1440*2960的Pixel 3XL機(jī)型上锣吼,用16:9的啟動(dòng)圖是這樣的效果(地球都變成橢圓了)
這種情況一般有幾種解決辦法
1、把啟動(dòng)圖制作成9.png圖蓝厌,9.png是我們安卓開發(fā)的老朋友了玄叠,一般這種圖片拉伸問題都可以用9.png來解決,但啟動(dòng)圖有點(diǎn)特殊拓提,顯示完啟動(dòng)圖后常常會(huì)顯示開屏廣告读恃,如果開屏頁面的布局和廣告邏輯比較復(fù)雜(像我司項(xiàng)目的開屏,既有半屏廣告又有全屏廣告,還有g(shù)if寺惫、視頻廣告等)疹吃,在原有布局不改動(dòng)的情況下,用了9.png會(huì)導(dǎo)致各種奇怪的問題
2肌蜻、把開屏圖制作成layer-list的drawable文件互墓,底層layer設(shè)置成純色(如純白純黑,根據(jù)開屏圖顏色而定)蒋搜,上層放置關(guān)鍵元素(如項(xiàng)目logo)篡撵,這種方式適合開屏圖比較簡單,而且開屏圖背景可以和底層顏色融合的情況
3豆挽、制作多種尺寸的開屏圖育谬,分別放到不同的drawable文件夾下,考慮到資源打包的大小和UI的工作量帮哈,我們分別準(zhǔn)備16:9和2:1的開屏圖也夠用了膛檀,然后問題在于,我們應(yīng)該把16:9和2:1的圖分別放到哪個(gè)文件夾下娘侍?我在模擬器選取了覆蓋主流屏幕的機(jī)型
16:9的啟動(dòng)圖我們根據(jù)圖片實(shí)際分辨率放置在drawable-xhdpi或者drawable-xxhdpi文件夾是比較合適的咖刃,那么2:1的應(yīng)該放在哪里呢? 查閱官方文檔憾筏,發(fā)現(xiàn)有這樣的限定符
即drawable-long和drawable-notlong嚎杨,分別對(duì)應(yīng)寬屏和非寬屏,但是這個(gè)限定符是API 4中增加的氧腰,描述中的WQVGA枫浙、WVGA、FWVGA在現(xiàn)今主流手機(jī)中也不存在了古拴,本著試一試也不會(huì)虧的精神箩帚,我嘗試在工程中增加了drawable-long文件夾,并把2:1的啟動(dòng)圖放進(jìn)去黄痪,運(yùn)行紧帕,奇跡出現(xiàn)了,Pixel 3和Pixel 3 XL這種全面屏的手機(jī)居然可以取到這個(gè)文件夾里的圖片桅打,而Nexus 4焕参、Nexus5、Nexus6等接近16:9的手機(jī)仍然是取drawable-xhdpi或者drawable-xxhdpi的文件夾油额,這就解決了全面屏手機(jī)啟動(dòng)圖拉伸的問題】讨悖看起來潦嘶,雖然drawable-long的文檔描述有點(diǎn)舊,但谷歌應(yīng)該是有不斷更新它的適配邏輯的崇众,我測試用的模擬器全部都基于Android5.1掂僵,而用我自己的Android 10真機(jī)測試也是沒有問題航厚,大致得出結(jié)論這個(gè)方案是可行的