Android屏幕適配(國內(nèi))

1.Android系統(tǒng)的圖片尋找機(jī)制對放在xhdpi,xxhdpi等不同密度的圖片會(huì)根據(jù)手機(jī)的密度尋找最合適的文件夾下的圖片,然后進(jìn)行根據(jù)密度的比率進(jìn)行放大,縮小處理。

2.意味著一張背景圖如果是7201280的大小的話,放在上述分辨率的手機(jī)上都是可以無變形縮放的。目前我們的設(shè)計(jì)師大多情況都是按照ios的手機(jī)來設(shè)計(jì)界面的,主流是按照iphone6(7501334)

一計(jì)算,你也會(huì)發(fā)現(xiàn),這個(gè)也是和上述主流的分辨率長寬也是對應(yīng)的比率關(guān)系。

結(jié)論:我們設(shè)計(jì)師如果按照iphone6設(shè)計(jì)屏幕的話,Android是可以一套圖片就可以達(dá)到界面的適配,只不過放在xhdpi或者xxhdpi下面,Android SDK會(huì)自動(dòng)屏幕尺寸選擇對應(yīng)的資源文件進(jìn)行渲染,如SDK檢測到你手機(jī)dpi是320的話會(huì)優(yōu)先到drawable-xhdpi文件夾下找對應(yīng)的圖片資源,注意只是優(yōu)先,假設(shè)你手機(jī)dpi是320,但是你只在xxhpdi文件夾下有對應(yīng)的圖片資源文件,程序一樣可以正常運(yùn)行。所以理論上來說只需要提供一種規(guī)格的圖片資源就ok了,如果只提供hdpi規(guī)格的圖片,對于大分辨率的手機(jī)如果把圖片放大就會(huì)不清晰,所以需要提供一套你需要支持的最大dpi的圖片,這樣即使用戶的手機(jī)分辨率很小,這樣圖片縮小依然很清晰。

既然一套圖可以達(dá)到界面的適配,那應(yīng)該采取哪一套圖,又應(yīng)該放在Android下面的drawable還是mipmap下面,如果是放在drawable下面,又應(yīng)該放在drawable-xxhdpi,drawable-xhdpi,drawable-xxxhdpi還是別的密度下面呢?帶著這個(gè)疑問,接著看下面的圖:

Android的dpi分布

Androidiosmdpi區(qū)間的手機(jī),dp=px。在3GS上,1point=1px。xhdpi區(qū)間的手機(jī),1dp=2px。在iPhone4上,1point=2px。在iPhone5上,1point=2px。在iPhone6上,1point=2px。xxhdpi區(qū)間的手機(jī),1dp=3px。在iPhone6 plus上,1point=3px。

分析:從上圖我們可以看出ios的2x圖片就是對應(yīng)Android的xhdpi的密度,ios的3x圖片就是對應(yīng)Android的xxhdpi的密度。結(jié)論:前面我們得到結(jié)論是Android下面也是一套圖也是可以適配的,意味著我們將ios的3x圖放在xxhdpi文件夾下面,或者拿ios2x的圖片放在xhdpi下面都是能適配主流的分辨率機(jī)型。但是根據(jù)前面的分析,為了防止放大不清楚的情況,Android最好是放在xxhdpi下面。

有人可能會(huì)有疑問,放在xxhdpi密度下面的圖片,會(huì)不會(huì)內(nèi)存增大,畢竟圖片會(huì)變大,那我們再進(jìn)行內(nèi)存層面的分析:

經(jīng)測試:

3.首頁2x的圖片放在xxhdpi下面,在xxhdpi密度的手機(jī)下顯示:width = 750 height = 1294 bitmap = 3791kb

4.首頁2x的圖片放在xhdpi下面,在xxhdpi密度的手機(jī)下顯示:width = 1125 height = 1941bitmap = 8529kb 大小是放在xxhdpi的2.25倍。

分析:有個(gè) drawable的density 和真實(shí)屏幕的 targetDensity,因?yàn)?scaledWidth 和 scaledHeight 是由 width 和 height 乘以 scale (手機(jī)真實(shí)的屏幕密度/drawable的密度)得到的。我們看到 Canvas 放大了 scale 倍,然后又把讀到內(nèi)存的這張 bitmap 畫上去,相當(dāng)于把這張 bitmap 放大了 scale 平方倍。結(jié)論:雖然上面說了xxhdpi下的圖片在加載的過程內(nèi)存消耗得更少,但是前提是指同一張圖片從xxhdpi一到xhpi下面的話,加載內(nèi)存一般會(huì)擴(kuò)大2.25倍。但是由于3x的圖片本來長寬本來就比2x的圖片長寬的像素點(diǎn)就是多1.5倍。所以一般在這個(gè)層面,如果我們把ios的2x圖片放在xhdpi下面和把ios的3x圖片放在xxhdpi下面,對于同一個(gè)真機(jī)加載消耗的內(nèi)存基本是一樣的。

5.另外很多人對圖片是放在mipmap下面還是drawable下面總是有疑問,對放在什么文件夾下面沒有什么概念,對此官方有個(gè)解釋:

Drawables may be stripped out as part of dp-specific resource optimisation. But mipmaps will not be stripped. So it's best to put app icons under mipmaps.

Here is more detail written on google documentation page:Different home screen launcher apps on different devices show app launcher icons at various resolutions. When app resource optimization techniques remove resources for unused screen densities, launcher icons can wind up looking fuzzy because the launcher app has to upscale a lower-resolution icon for display. To avoid these display issues, apps should use the mipmap/ resource folders for launcher icons. The Android system preserves these resources regardless of density stripping, and ensures that launcher apps can pick icons with the best resolution for display.

總結(jié)下:上面話就是想表達(dá)放在drawable的圖片會(huì)對不適用真機(jī)屏幕密度的資源進(jìn)行移除,放在mipmap依然會(huì)保留下各個(gè)密度的圖片,所以為了保證桌面圖標(biāo)的顯示質(zhì)量因此放在mipmap下面,其他的圖標(biāo)建議都放在drawable文件夾下面吧。

最終結(jié)論:那么經(jīng)過上面一系列的分析,如果你們的設(shè)計(jì)師是按照iphone6來設(shè)計(jì)界面的話,Android的屏幕適配最好就是將ios的3x圖片放在Android的drawable-xxhdpi文件夾下面。

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

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

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