android 屏幕尺寸适配实现方案
前言:一直在網(wǎng)上看到很多的屏幕尺寸適配方法,并沒有做系統(tǒng)的總結(jié),最近一個(gè)項(xiàng)目里面又要做適配,索性就整理了一下這方面的知識點(diǎn)。
一、一般網(wǎng)上有關(guān)的屏幕適配方案:
http://www.cocoachina.com/android/20151030/13971.html
這篇個(gè)人覺得闡述的很全面,技術(shù)點(diǎn)很全、原理說明等方面都是說的很好的,里面有關(guān)于重要概念、解決方案等說的很詳細(xì)。
比如:
1)基本概念
屏幕尺寸
屏幕尺寸指屏幕的對角線的長度,單位是英寸,1英寸=2.54厘米
比如常見的屏幕尺寸有2.4、2.8、3.5、3.7、4.2、5.0、5.5、6.0等
屏幕分辨率
屏幕分辨率是指在橫縱向上的像素點(diǎn)數(shù),單位是px,1px=1個(gè)像素點(diǎn)。一般以縱向像素*橫向像素,如1960*1080。
屏幕像素密度
屏幕像素密度是指每英寸上的像素點(diǎn)數(shù),單位是dpi,即“dot per inch”的縮寫。屏幕像素密度與屏幕尺寸和屏幕分辨率有關(guān),在單一變化條件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
dp、dip、dpi、sp、px
px我們應(yīng)該是比較熟悉的,前面的分辨率就是用的像素為單位,大多數(shù)情況下,比如UI設(shè)計(jì)、Android原生API都會以px作為統(tǒng)一的計(jì)量單位,像是獲取屏幕寬高等。
dip和dp是一個(gè)意思,都是Density Independent Pixels的縮寫,即密度無關(guān)像素,上面我們說過,dpi是屏幕像素密度,假如一英寸里面有160個(gè)像素,這個(gè)屏幕的像素密度就是160dpi,那么在這種情況下,dp和px如何換算呢?在Android中,規(guī)定以160dpi為基準(zhǔn),1dip=1px,如果密度是320dpi,則1dip=2px,以此類推。
假如同樣都是畫一條320px的線,在480*800分辨率手機(jī)上顯示為2/3屏幕寬度,在320*480的手機(jī)上則占滿了全屏,如果使用dp為單位,在這兩種分辨率下,160dp都顯示為屏幕一半的長度。這也是為什么在Android開發(fā)中,寫布局的時(shí)候要盡量使用dp而不是px的原因。
而sp,即scale-independent pixels,與dp類似,但是可以根據(jù)文字大小首選項(xiàng)進(jìn)行放縮,是設(shè)置字體大小的御用單位。
mdpi、hdpi、xdpi、xxdpi
其實(shí)之前還有個(gè)ldpi,但是隨著移動設(shè)備配置的不斷升級,這個(gè)像素密度的設(shè)備已經(jīng)很罕見了,所在現(xiàn)在適配時(shí)不需考慮。
mdpi、hdpi、xdpi、xxdpi用來修飾Android中的drawable文件夾及values文件夾,用來區(qū)分不同像素密度下的圖片和dimen值。
那么如何區(qū)分呢?Google官方指定按照下列標(biāo)準(zhǔn)進(jìn)行區(qū)分:
在進(jìn)行開發(fā)的時(shí)候,我們需要把合適大小的圖片放在合適的文件夾里面。下面以圖標(biāo)設(shè)計(jì)為例進(jìn)行介紹。
在設(shè)計(jì)圖標(biāo)時(shí),對于五種主流的像素密度(MDPI、HDPI、XHDPI、XXHDPI 和 XXXHDPI)應(yīng)按照 2:3:4:6:8 的比例進(jìn)行縮放。例如,一個(gè)啟動圖標(biāo)的尺寸為48x48 dp,這表示在 MDPI 的屏幕上其實(shí)際尺寸應(yīng)為 48x48 px,在 HDPI 的屏幕上其實(shí)際大小是 MDPI 的 1.5 倍 (72x72 px),在 XDPI 的屏幕上其實(shí)際大小是 MDPI 的 2 倍 (96x96 px),依此類推。
雖然 Android 也支持低像素密度 (LDPI) 的屏幕,但無需為此費(fèi)神,系統(tǒng)會自動將 HDPI 尺寸的圖標(biāo)縮小到 1/2 進(jìn)行匹配。
下圖為圖標(biāo)的各個(gè)屏幕密度的對應(yīng)尺寸:
2)解決方案:
比如布局的時(shí)候,多使用權(quán)重、百分比等方案,但是這些都沒有實(shí)際地結(jié)合Demo進(jìn)行說明,下面,結(jié)合個(gè)人項(xiàng)目的實(shí)際開發(fā),進(jìn)行適配的方案說明:
二、我的適配方案:
1.項(xiàng)目要求:項(xiàng)目要求適配1280*720以及1920*1080兩種屏幕,以下面兩個(gè)手機(jī)的參數(shù)作為例子說明:
2.項(xiàng)目圖片的適配:
1)根據(jù)要去適配的機(jī)型及其分辨率、像素密度來要求美工切好對應(yīng)尺寸的矢量圖,如:這里使用的兩個(gè)手機(jī)分別為:320dpi、420dpi,相應(yīng)的需要準(zhǔn)備XHDPI、XXHDPI 兩套圖;
2)一般的,android上習(xí)慣以1280*720作為一個(gè)基準(zhǔn)進(jìn)行尺寸的標(biāo)注,原因可能是1280*720的分辨率下,屏幕密度為320dpi,剛剛好為160dpi的2倍,px與dp之間的換算及向上、向下兼容的時(shí)候比較方便(具體是不是這個(gè)原因,沒有進(jìn)一步深究,對這個(gè)了解的比較好的,歡迎大神指教);
3)緊接著,把切好的圖片文件對應(yīng)的放在項(xiàng)目的res資源文件夾下:
(需要注意的是:同一樣式的圖片文件,需要使用同一個(gè)命名,這樣不同的分辨率手機(jī)下加載的時(shí)候,手機(jī)才能正常識別)
4)最后,apk打包運(yùn)行的時(shí)候,系統(tǒng)會根據(jù)不同的手機(jī)分辨率到對應(yīng)的資源文件夾下加載對應(yīng)的圖片資源。
3.尺寸的適配:
尺寸的適配是比較繁雜、也是比較困難的事。我們知道,android的屏幕分辨率、像素密度、尺寸種類是非常多的,所以,我們不可能百分之百把所有的機(jī)型都做到適配,只能選擇其中市場占比大的機(jī)型來做適配。根據(jù)我所了解到的尺寸適配,主要可以分為dp和px適配兩種方式:
dp適配
我們知道,一英寸里面有160個(gè)像素,這個(gè)屏幕的像素密度就是160dpi,這種情況下,在Android中,規(guī)定以160dpi為基準(zhǔn),1dpi=1px,如果密度是320dpi,則1dpi=2px,以此類推。如果使用dp值,則其在android系統(tǒng)中加載的過程是這樣的:首先,手機(jī)根據(jù)自身的屏幕密度與控件上具體的dp值進(jìn)行換算,變成px值,然后,才在屏幕中顯示,即:屏幕最后在屏幕上顯示,使用的還是px值,dp只是android開發(fā)中使用的一個(gè)像素密度無關(guān)的單位
還有一個(gè)需要注意的問題是:dp值在xml文件中具體使用之后的效果是:當(dāng)某一控件的尺寸在xml布局文件中確定之后,其無論在什么分辨率的手機(jī)上顯示的絕對尺寸都是一樣的,如:height為200px,則在1280*720中,dp=200/(320p/160p)=100,英寸=200px/320dpi=0.625,而在1920*1080中,100dp=100dp/(480p/160p)=300px,英寸=300px/480dpi=0.625。
1)首先,我們要知道的一點(diǎn)是:安卓會自動根據(jù)手機(jī)的大小(按寬度算 dp為單位)去選擇values或者values-swxxxdp下面的dimens.xml文件中的尺寸(所以,我們需要根據(jù)適配的要求計(jì)算出對應(yīng)的寬度dp值,然后在res文件夾下創(chuàng)建對應(yīng)的dimens.xml文件);
需要說明的是:基準(zhǔn)值的dimens.xml文件定義放在values下的dimens.xml,其他的適配尺寸,需要?jiǎng)?chuàng)建并定義。
2)以例子中的letv x520及 xiaomi Redmi 4x 寬度為例:
letv x520:dp=160*1080/420=411
xiaomi Redmi 4x: dp=160*72/320=360
即:dp=160*widthPixels / density
基本上,360dp這個(gè)寬度的dp值在android中使用并作為基準(zhǔn)值是比較常用的,因此,我們就在res文件夾下以360dp作為一個(gè)基準(zhǔn)值,在values文件下的dimens.xml定義:按照這個(gè)基準(zhǔn),所有的寬度切成360dp份,其他的尺寸基于這個(gè)基準(zhǔn)等比縮放;letv x520的寬度dp值為411,則需要?jiǎng)?chuàng)建“values-sw411dp/dimens.xml”文件:
對于1280x720的屏幕,寬度給“values/dimens.xml”dp_360變量的值即占滿屏幕;對于1920*1080的屏幕,寬度給“values-sw411dp/dimens.xml”下的dp_360(即:411dp)變量的值即占滿屏幕寬度給其他尺寸以此類推。
這樣,就完成了dp方案的尺寸適配。
適配之后,配置的尺寸使用:
px適配
px適配與dp適配事實(shí)上同出一轍,依然是需要根據(jù)適配要求,確定基準(zhǔn)的分辨率(一般還是以1280*720作為基準(zhǔn)),如:
以1280x720為基準(zhǔn),把所有的寬度切成720份,高度切成1280份,其他的尺寸基于這個(gè)基準(zhǔn)等比縮放。
對于1280x720的屏幕,寬度給x720變量的值即占滿屏幕。
或者,用戶的手機(jī)屏幕為800x480:
根據(jù)不同的屏幕,x720變量會代表對應(yīng)的px值,其他的變量也一樣,
這樣,就完成了px方案的尺寸適配。
以上就是我在項(xiàng)目中實(shí)際使用的適配方案,其中,dp方案是項(xiàng)目中實(shí)際使用的,px參考了
https://blog.csdn.net/fesdgasdgasdg/article/details/52325590
這位大神的博客進(jìn)行了說明。
不對之處,歡迎指出。
參考博客:https://blog.csdn.net/fesdgasdgasdg/article/details/52325590
總結(jié)
以上是生活随笔為你收集整理的android 屏幕尺寸适配实现方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言long和short,long和s
- 下一篇: sis最新ip地址2020入口一_202