Android 屏幕適配

定義

使得某一元素在Android不同尺寸、不同分辨率的手機上具備相同的顯示效果

相關重要概念

屏幕尺寸

含義:手機對角線的物理尺寸

單位:英寸(inch),1英寸=2.54cm

Android手機常見的尺寸有5寸、5.5寸、6寸等等

屏幕分辨率

含義:手機在橫向、縱向上的像素點數(shù)總和

一般描述成屏幕的"寬x高”=AxB

含義:屏幕在橫向方向(寬度)上有A個像素點,在縱向方向

(高)有B個像素點

例子:1080x1920趁窃,即寬度方向上有1080個像素點,在高度方向上有1920個像素點

單位:px(pixel)急前,1px=1像素點

UI設計師的設計圖會以px作為統(tǒng)一的計量單位

Android手機常見的分辨率:320x480醒陆、480x800、720x1280裆针、1080x1920

屏幕像素密度

含義:每英寸的像素點數(shù)

單位:dpi(dots per ich)

假設設備內每英寸有160個像素刨摩,那么該設備的屏幕像素密度=160dpi

安卓手機對于每類手機屏幕大小都有一個相應的屏幕像素密度:

屏幕尺寸、分辨率据块、像素密度三者關系

一部手機的分辨率是寬x高码邻,屏幕大小是以寸為單位,那么三者的關系是:

三者關系示意圖

數(shù)學不太差的人應該能懂.....吧另假?

不懂沒關系像屋,在這里舉個例子

假設一部手機的分辨率是1080x1920(px),屏幕大小是5寸边篮,問密度是多少己莺?

解:請直接套公式

密度無關像素

含義:density-independent pixel奏甫,叫dp或dip,與終端上的實際物理像素點無關凌受。

單位:dp阵子,可以保證在不同屏幕像素密度的設備上顯示相同的效果

Android開發(fā)時用dp而不是px單位設置圖片大小,是Android特有的單位

場景:假如同樣都是畫一條長度是屏幕一半的線胜蛉,如果使用px作為計量單位挠进,那么在480x800分辨率手機上設置應為240px;在320x480的手機上應設置為160px誊册,二者設置就不同了领突;如果使用dp為單位,在這兩種分辨率下案怯,160dp都顯示為屏幕一半的長度君旦。

dp與px的轉換

因為ui設計師給你的設計圖是以px為單位的,Android開發(fā)則是使用dp作為單位的嘲碱,那么我們需要進行轉換:

在Android中金砍,規(guī)定以160dpi(即屏幕分辨率為320x480)為基準:1dp=1px

獨立比例像素

含義:scale-independent pixel,叫sp或sip

單位:sp

Android開發(fā)時用此單位設置文字大小麦锯,可根據(jù)字體大小首選項進行縮放

推薦使用12sp恕稠、14sp、18sp离咐、22sp作為字體設置的大小谱俭,不推薦使用奇數(shù)和小數(shù),容易造成精度的丟失問題宵蛀;小于12sp的字體會太小導致用戶看不清

解決方案

“布局控件”匹配

本質:使得布局組件在不同屏幕密度上顯示相同的像素效果

做法1:使用密度無關像素

由于各種屏幕的像素密度都有所不同,因此相同數(shù)量的像素在不同設備上的實際大小也有所差異县貌,這樣使用像素(px)定義布局尺寸就會產生問題术陶。

因此,請務必使用密度無關像素 dp獨立比例像素 sp單位指定尺寸煤痕。

相關概念介紹

密度無關像素

含義:density-independent pixel梧宫,叫dp或dip,與終端上的實際物理像素點無關摆碉。

單位:dp塘匣,可以保證在不同屏幕像素密度的設備上顯示相同的效果

Android開發(fā)時用dp而不是px單位設置圖片大小,是Android特有的單位

場景:假如同樣都是畫一條長度是屏幕一半的線巷帝,如果使用px作為計量單位忌卤,那么在480x800分辨率手機上設置應為240px;在320x480的手機上應設置為160px楞泼,二者設置就不同了驰徊;如果使用dp為單位笤闯,在這兩種分辨率下,160dp都顯示為屏幕一半的長度棍厂。

dp與px的轉換

因為ui給你的設計圖是以px為單位的颗味,Android開發(fā)則是使用dp作為單位的,那么該如何轉換呢牺弹?

在Android中浦马,規(guī)定以160dpi(即屏幕分辨率為320x480)為基準:1dp=1px

獨立比例像素

含義:scale-independent pixel,叫sp或sip

單位:sp

Android開發(fā)時用此單位設置文字大小张漂,可根據(jù)用戶的偏好文字大小/字體大小首選項進行縮放

推薦使用12sp晶默、14sp、18sp鹃锈、22sp作為字體設置的大小荤胁,不推薦使用奇數(shù)和小數(shù),容易造成精度的丟失問題屎债;小于12sp的字體會太小導致用戶看不清

所以仅政,為了能夠進行不同屏幕像素密度的匹配,我們推薦:

使用dp來代替px作為控件長度的統(tǒng)一度量單位

使用sp作為文字的統(tǒng)一度量單位


“圖片資源”匹配

本質:使得圖片資源在不同屏幕密度上顯示相同的像素效果

做法:提供備用位圖(符合屏幕尺寸的圖片資源)

由于 Android 可在各種屏幕密度的設備上運行盆驹,因此我們提供的位圖資源應該始終可以滿足各類密度的要求:

步驟1:根據(jù)以下尺寸范圍針對各密度生成相應的圖片圆丹。

比如說,如果我們?yōu)?xhdpi 設備生成了 200x200 px尺寸的圖片躯喇,就應該按照相應比例地為 hdpi辫封、mdpi 和 ldpi 設備分別生成 150x150、100x100 和 75x75 尺寸的圖片

即一套分辨率=一套位圖資源(這個當然是Ui設計師做了)

步驟2:將生成的圖片文件放在 res/ 下的相應子目錄中(mdpi廉丽、hdpi倦微、xhdpi、xxhdpi)正压,系統(tǒng)就會根據(jù)運行您應用的設備的屏幕密度自動選擇合適的圖片

步驟3:通過引用 @drawable/id欣福,系統(tǒng)都能根據(jù)相應屏幕的 屏幕密度(dpi)自動選取合適的位圖。

注:

如果是.9圖或者是不需要多個分辨率的圖片焦履,放在drawable文件夾即可

對應分辨率的圖片要正確的放在合適的文件夾拓劝,否則會造成圖片拉伸等問題。

更好地方案解決“圖片資源”適配問題

上述方案是常見的一種方案嘉裤,這固然是一種解決辦法郑临,但缺點在于:

每套分辨率出一套圖,為美工或者設計增加了許多工作量

對Android工程文件的apk包變的很大

那么屑宠,有沒有一種方法:

保證屏幕密度適配

可以最小占用設計資源

使得apk包不變大(只使用一套分辨率的圖片資源)

下面我們就來介紹這個方法

只需選擇唯一一套分辨率規(guī)格的圖片資源

方法介紹

1. 先來理解下Android 加載資源過程

Android SDK會根據(jù)屏幕密度自動選擇對應的資源文件進行渲染加載(自動渲染)

比如說厢洞,SDK檢測到你手機的分辨率是320x480(dpi=160),會優(yōu)先到drawable-mdpi文件夾下找對應的圖片資源;但假設你只在xhpdi文件夾下有對應的圖片資源文件(mdpi文件夾是空的)犀变,那么SDK會去xhpdi文件夾找到相應的圖片資源文件妹孙,然后將原有大像素的圖片自動縮放成小像素的圖片,于是大像素的圖片照樣可以在小像素分辨率的手機上正常顯示获枝。

具體請看http://blog.csdn.net/xiebudong/article/details/37040263

所以理論上來說只需要提供一種分辨率規(guī)格的圖片資源就可以了蠢正。

那么應該提供哪種分辨率規(guī)格呢?

如果只提供ldpi規(guī)格的圖片省店,對于大分辨率(xdpi嚣崭、xxdpi)的手機如果把圖片放大就會不清晰

所以需要提供一套你需要支持的最大dpi分辨率規(guī)格的圖片資源,這樣即使用戶的手機分辨率很小懦傍,這樣圖片縮小依然很清晰雹舀。那么這一套最大dpi分辨率規(guī)格應該是哪種呢?是現(xiàn)在市面手機分辨率最大可達到1080X1920的分辨率(dpi=xxdpi=480)嗎粗俱?

2. xhdpi應該是首選

原因如下:

xhdpi分辨率以內的手機需求量最旺盛

目前市面上最普遍的高端機的分辨率還多集中在720X1080范圍內(xhdpi)说榆,所以目前來看xhpdi規(guī)格的圖片資源成為了首選

節(jié)省設計資源&工作量

在現(xiàn)在的App開發(fā)中(iOS和Android版本),有些設計師為了保持App不同版本的體驗交互一致寸认,可能會以iPhone手機為基礎進行設計签财,包括后期的切圖之類的。

設計師們一般都會用最新的iPhone6和iPhone5s(5s和5的尺寸以及分辨率都一樣)來做原型設計偏塞,所有參數(shù)請看下圖


iPhone主流的屏幕dpi約等于320, 剛好屬于xhdpi唱蒸,所以選擇xhdpi作為唯一一套dpi圖片資源,可以讓設計師不用專門為Android端切圖灸叼,直接把iPhone的那一套切好的圖片資源放入drawable-xhdpi文件夾里就好神汹,這樣大大減少的設計師的工作量!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末古今,一起剝皮案震驚了整個濱河市屁魏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捉腥,老刑警劉巖蚁堤,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異但狭,居然都是意外死亡,警方通過查閱死者的電腦和手機撬即,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進店門立磁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剥槐,你說我怎么就攤上這事唱歧。” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵颅崩,是天一觀的道長几于。 經常有香客問我,道長沿后,這世上最難降的妖魔是什么沿彭? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮尖滚,結果婚禮上喉刘,老公的妹妹穿的比我還像新娘。我一直安慰自己漆弄,他們只是感情好睦裳,可當我...
    茶點故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撼唾,像睡著了一般廉邑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上倒谷,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天蛛蒙,我揣著相機與錄音,去河邊找鬼恨锚。 笑死宇驾,一個胖子當著我的面吹牛,可吹牛的內容都是我干的猴伶。 我是一名探鬼主播课舍,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼他挎!你這毒婦竟也來了筝尾?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤办桨,失蹤者是張志新(化名)和其女友劉穎筹淫,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呢撞,經...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡损姜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了殊霞。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摧阅。...
    茶點故事閱讀 39,919評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖绷蹲,靈堂內的尸體忽然破棺而出棒卷,到底是詐尸還是另有隱情顾孽,我是刑警寧澤,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布比规,位于F島的核電站若厚,受9級特大地震影響,放射性物質發(fā)生泄漏蜒什。R本人自食惡果不足惜测秸,卻給世界環(huán)境...
    茶點故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望吃谣。 院中可真熱鬧乞封,春花似錦、人聲如沸岗憋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仔戈。三九已至关串,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間监徘,已是汗流浹背晋修。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凰盔,地道東北人墓卦。 一個月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像户敬,于是被迫代替她去往敵國和親落剪。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內容