分享一點(diǎn)關(guān)于Android屏幕適配的種種-創(chuàng)新互聯(lián)

引子

屏幕適配是 android 開發(fā)/面試 繞不開的一個(gè)問題。本文 將屏幕適配的 知識(shí)要點(diǎn)完整展現(xiàn)給各位讀者。

創(chuàng)新互聯(lián)總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號(hào)搭建、成都小程序開發(fā)、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動(dòng)行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!

正文大綱

  • android需要做屏幕適配的原因
  • 基礎(chǔ)知識(shí)點(diǎn)(很重要)
  • 屏幕適配攻略
正文
android需要做屏幕適配的原因

關(guān)鍵字: android碎片化

android面世以來,google開源了android系統(tǒng),各家廠商各自為政,導(dǎo)致屏幕尺寸沒有統(tǒng)一標(biāo)準(zhǔn),屏幕的寬高比各種各樣,屏幕密度也是各個(gè)廠家攀比的資本, 導(dǎo)致Android開發(fā)者想要用一套代碼來適配所有的設(shè)備變得格外的困難,雖然 谷歌出了 dp單位來替代px,但是 dp依然有它無法完全適配的地方。這個(gè)也就是需要我們利用其他手段去 完成適配的地方。

面試點(diǎn)
Q: 關(guān)于屏幕適配,為什么 有了 dp單位,依然要適配呢?
A: dp雖然能夠解決大部分情況下的適配問題,但是針對(duì)少數(shù)機(jī)型,無法適配, 原因 是:google提供的 dp單位,在現(xiàn)有的 android市場環(huán)境下,是 不可靠的,編碼時(shí)的 dp,在運(yùn)行時(shí)會(huì)轉(zhuǎn)化成 px,此時(shí)的px不能準(zhǔn)確對(duì)照UI的原本設(shè)計(jì)。

最直觀體現(xiàn)就是: 同樣 300dp,在A手機(jī)上可以占滿全寬,但是在B手機(jī)上,占不滿,或者會(huì)超出全寬。至于為什么dp不可靠? 后面會(huì)解釋。

基礎(chǔ)知識(shí)點(diǎn)(很重要)

以下概念很基礎(chǔ),但是也很重要,基礎(chǔ)知識(shí)缺少一個(gè)環(huán)節(jié),后面復(fù)雜的攻略理解起來就有障礙。

1. 像素點(diǎn)

像素點(diǎn)是物理概念,用術(shù)語來解釋,就是如下這段話:通常所說的像素,就是CCD/CMOS上光電感應(yīng)元件的數(shù)量,一個(gè)感光元件經(jīng)過感光,光電信號(hào)轉(zhuǎn)換,A/D轉(zhuǎn)換等步驟以后,在輸出的照片上就形成一個(gè)點(diǎn),我們?nèi)绻延跋穹糯髷?shù)倍,會(huì)發(fā)現(xiàn)這些連續(xù)色調(diào)其實(shí)是由許多色彩相近的小方點(diǎn)所組成,這些小方點(diǎn)就是構(gòu)成影像的最小單位“像素”(Pixel)。簡而言之,像素就是手機(jī)屏幕的最小構(gòu)成單元。

簡單來說,像素點(diǎn)就是 屏幕上色彩區(qū)域的最小單位。在所有的設(shè)備上,1px 都是等同的。UI小姐姐作圖一般都會(huì)以px為單位。

2. 分辨率

比如: 19201080 分辨率,表示當(dāng)前設(shè)備的屏幕是由 橫向1080 縱向1920 個(gè)像素點(diǎn) 組合而成。

3. 屏幕尺寸

屏幕對(duì)角線的長度。一般以英寸為單位,常見的屏幕尺寸有 4.7 , 5.5 , 6.0 。

4. 屏幕像素密度

定義: 一平方英寸面積內(nèi),存在 多少個(gè)像素點(diǎn)。同樣是 1920*1080 的分辨率,存在兩款手機(jī),一個(gè)是4.7英寸,一個(gè)是6.0英寸,這兩者的 像素密度是不一樣的。屏幕密度的單位: dpi(dots per inch).標(biāo)準(zhǔn)屏幕分辨率 :160dpi 。即:一平方英寸面積,存在 160像素點(diǎn)。(mdpi).

5. 屏幕尺寸,分辨率,像素密度 三者之間的關(guān)系

像素密度,可以由 屏幕尺寸和 分辨率計(jì)算得出。計(jì)算公式為:
分享一點(diǎn)關(guān)于Android屏幕適配的種種
比如下圖所示:
分享一點(diǎn)關(guān)于Android屏幕適配的種種
我這里有一塊1920*1080的5寸屏幕,通過上面的公式計(jì)算得出,它的像素密度為 440dpi . 可見,px是和像素密度有直接關(guān)系的 像素單位。

6. 密度無關(guān)的像素單位(dp,或者dip)

全英文為: density-independent pixel.(注意此處是 dip,上面的像素密度是 dpi, 千萬不要因?yàn)檫@個(gè),在面試的時(shí)候出丑 )使用dp作為長度單位,可以保證在不同的屏幕像素密度的手機(jī)上顯示 很相似的效果。比如: 使用 480x800的手機(jī)上,要畫一條長度為一半屏幕寬的線條,我們可以設(shè)置線條的長度為 240px,而在 320x480的屏幕上,我們只需要 160px,但是我們可以直接使用 160dp,來同時(shí)讓兩個(gè)屏幕上的這條線占全寬的一半。

px和dp的換算公式為: px=dp*(dpi/160)公式解讀:如果有一個(gè)屏幕密度為 160dpi的手機(jī),在它上面,1px=1dp;而如果是 320dpi的手機(jī),則 1px = 0.5dp. 簡而言之規(guī)律就是:屏幕像素密度(dpi)越高的手機(jī),1dp所代表的px就越多.

下面解釋為什么dp有時(shí)候靠不住.

如果UI小姐姐以 320*480 dpi160的屏幕為標(biāo)準(zhǔn),畫了一條長度為 160px的線,長度為屏幕寬度的 一半,這個(gè)時(shí)候,你直接用 160dp,一般就能完成適配。但是如果這樣的布局 運(yùn)行在 320x480分辨率,但是屏幕密度為 150dpi 略小于 160dpi,這個(gè)時(shí)候 你布局里面寫的 160dp就會(huì)實(shí)際超過 160px 不再是占屏幕寬的一半,而是略微超過。

7. 獨(dú)立比例像素 (sp)

全英文為: scale-independent pixel (簡稱sp或者sip)專門用于字體大小表示。推薦使用 12sp以上的偶數(shù)作為 字體大小, 不要使用奇數(shù),或者浮點(diǎn)型小數(shù),因?yàn)槿菀自斐删葋G失。

面試點(diǎn):
Q: sp和dp有什么區(qū)別?
A: 通常情況下,dp和sp效果類似,但是有一點(diǎn),如果用戶 調(diào)整了手機(jī)字體,比如 從標(biāo)準(zhǔn),變成了 超大,那么,1dp 原本等于1px依然不變,但是1sp就會(huì)從1px變成3px(只是舉個(gè)例子,數(shù)值不必認(rèn)真). 因此,在用戶調(diào)整字體的情況下,同樣的布局,可能出現(xiàn) 窗口大小不變,但是文字尺寸發(fā)生變化的情況。

屏幕適配攻略
1. 布局適配

使用多套布局適應(yīng)不同屏幕。此方法必須要了解 布局限定符的概念。如圖:
分享一點(diǎn)關(guān)于Android屏幕適配的種種
限定符: 在原本的 layout后面加上橫杠,然后加上限定名。形成 layout-XXX的形式,具體規(guī)則請(qǐng)參考谷歌官網(wǎng): https://developer.android.google.cn/training/multiscreen/screensizes, 重點(diǎn)摘錄如下:
分享一點(diǎn)關(guān)于Android屏幕適配的種種
分享一點(diǎn)關(guān)于Android屏幕適配的種種
使用上面的限定符,幾乎可以解決所有的適配問題,但是另外還有一個(gè)小技巧幫我們節(jié)省工作量 : 布局別名.

適用情形為:當(dāng)多個(gè)加了限定符的 layout.xml中都引用了同一個(gè) 子布局,而子布局的內(nèi)容可能相同,也可能不同。這個(gè)時(shí)候,使用布局別名,可以節(jié)省操作量。
分享一點(diǎn)關(guān)于Android屏幕適配的種種
分享一點(diǎn)關(guān)于Android屏幕適配的種種
方案評(píng)價(jià): 講道理,這個(gè)是 下下策,因?yàn)樵谀阈枰薷牟季值臅r(shí)候,你可能需要修改多套布局,這個(gè)要多惡心就多惡心,懂的人都懂.

2. 代碼適配

我們通過java代碼去獲取屏幕的寬高,動(dòng)態(tài)去指定控件的寬高 。獲取屏幕寬高的方式

代碼適配,一般用于動(dòng)態(tài)創(chuàng)建 控件,或者自定義view自己繪制圖形的時(shí)候。特別提一下接口適配:當(dāng)你去向后臺(tái)請(qǐng)求圖片的時(shí)候,我們可以在參數(shù)中帶入屏幕的寬高,或者是控件的寬高,來獲取我們想要的圖片,在圖片返回之后直接就能顯示得最優(yōu),而不需要我們app代碼中多動(dòng)手腳。

方案評(píng)價(jià): 這個(gè)比下下策稍微好一點(diǎn),但是 控件大小直接進(jìn)入了代碼,還是讓代碼不夠雅觀.

3. 布局組件的適配

盡量直接通過一套布局解決所有的麻煩,這個(gè)就叫布局組件的適配。這個(gè)是上上策. 包含如下手段:

  • 使用像素密度無關(guān)的單位 dp sp
  • 杜絕使用絕對(duì)布局,多使用相對(duì)和線性布局
  • 多使用 wrapcontent matchparent 以及線性布局的權(quán)重
  • 多用 minWidth minHeight,lines 等屬性
  • 使用多套限定的 dimens中定義的尺寸

可能面試點(diǎn)

Q:同一個(gè)布局文件中,我使用線性布局和相對(duì)布局都可以達(dá)成目的,那么如何抉擇?
A: 使用相對(duì)布局,很有可能出現(xiàn) 第一次測量"不滿意"的情況,從而會(huì)測量第二次。如果兩者都可以達(dá)成目的,并且兩者的布局層級(jí)相同,并且線性布局中沒有使用到 權(quán)重( 權(quán)重可能也會(huì)觸發(fā)第二次測量),此時(shí),優(yōu)先使用線性布局。 除此之外,都選擇相對(duì)布局。

結(jié)語

屏幕適配,工作中并不困難,但是面試多會(huì)問到?,F(xiàn)今主流的兩種完美適配方案,有頭條方案(直接變更DisplayMetrics中的density),以及 多套dimens適配方案,兩者各有千秋。下一篇文章繼續(xù)講吧。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站欄目:分享一點(diǎn)關(guān)于Android屏幕適配的種種-創(chuàng)新互聯(lián)
當(dāng)前路徑:http://www.muchs.cn/article4/ipeoe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、微信公眾號(hào)、App設(shè)計(jì)、商城網(wǎng)站建站公司、品牌網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)