Android全面的屏幕適配方案解析(三)__sw限定符適配方案

之前兩篇把屏幕適配概念梳理了還講解了dp適配方案、寬高限定符適配方案,還沒有看過的童鞋可以先參考這兩篇:
Android全面的屏幕適配方案解析(一)__屏幕適配概念梳理
Android全面的屏幕適配方案解析(二)__寬高限定符屏幕適配
Android全面的屏幕適配方案解析(三)__sw限定符適配方案
Android全面的屏幕適配方案解析(四)__今日頭條適配方案

下面列舉常用的適配方案:

  • dp適配方案
  • 寬高限定符適配方案
  • AndroidAutoLayout適配方案
  • sw限定符適配方案
  • 今日頭條適配方案
  • AndroidAutoSize適配方案

這里還是有必要重申一下频祝,有些過時(shí)的適配方案這里還講解啊厕倍,只能說每種適配方案都會(huì)有各自的優(yōu)缺點(diǎn)卓起,從最原始的適配方案講起,才能更好的理解為啥會(huì)衍生出各種適配方案视粮,話不多說,下面繼續(xù)講解橙凳。

3蕾殴、AndroidAutoLayout適配方案

所謂的AndroidAutoLayout適配方案笑撞,其實(shí)就是UI適配框架,這個(gè)是鴻洋大佬寫的適配方案钓觉,這也是受寬高限定符適配方案啟發(fā)寫的茴肥,使用方式也比較簡(jiǎn)單,直接填寫設(shè)計(jì)圖上的像素尺寸即可完成適配荡灾,不過目前這個(gè)框架已停止維護(hù)瓤狐。
下面還是根據(jù)實(shí)例來講解集成過程:

1、引入該適配框架

implementation 'com.zhy:autolayout:1.4.5'

2批幌、在項(xiàng)目中的AndroidManifest配置文件注明設(shè)計(jì)稿的尺寸础锐,這里測(cè)試以720x1280為例:

        <!-- 測(cè)試手機(jī)的尺寸 -->
        <meta-data
            android:name="design_width"
            android:value="720" />

        <meta-data
            android:name="design_height"
            android:value="1280" />

3、將需要適配的Activity繼承自AutoLayoutActivity荧缘,如果你不希望繼承AutoLayoutActivity郁稍,可以在編寫布局文件時(shí),將:

  • LinearLayout -> AutoLinearLayout
  • RelativeLayout -> AutoRelativeLayout
  • FrameLayout -> AutoFrameLayout

這樣也可以完成適配胜宇,我這里測(cè)試實(shí)例使用AutoRelativeLayout進(jìn)行測(cè)試耀怜,測(cè)試布局如下:

<?xml version="1.0" encoding="utf-8"?>
<com.zhy.autolayout.AutoRelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:layout_width="250px"
        android:layout_height="250px"
        android:layout_centerInParent="true"
        android:src="@mipmap/ic_launcher" />

</com.zhy.autolayout.AutoRelativeLayout>

測(cè)試布局文件非常的簡(jiǎn)單,只設(shè)置了圖片桐愉,細(xì)心的童鞋也發(fā)現(xiàn)了财破,這里圖片的寬高都是設(shè)置以px為單位,而不是我們常用的dp為單位从诲,如圖所示:

image

是的左痢,你沒有看錯(cuò),這里可以直接在布局文件里面使用具體的像素值系洛,例如設(shè)計(jì)稿上標(biāo)注的圖片是250*250俊性,那么我們可以直接寫250px,運(yùn)行時(shí)框架會(huì)幫助我們根據(jù)不同手機(jī)的具體尺寸按比例伸縮描扯,我們來看看這個(gè)實(shí)例在不同手機(jī)的測(cè)試對(duì)比效果圖:
image

我們?cè)賮砜匆幌聸]有使用AndroidAutoLayout適配方案之前不同手機(jī)的測(cè)試對(duì)比效果:
image

根據(jù)適配前后的對(duì)比效果還是挺明顯的定页,我這里主要介紹的是基本的適配方案,如果你想了解更詳細(xì)的適配方式绽诚,可以到這里點(diǎn)擊這里

毫無疑問典徊,這個(gè)UI框架是個(gè)極好的適配方案,使用簡(jiǎn)單恩够,所要做的就是抄抄設(shè)計(jì)稿上面的px卒落,直接寫入布局文件即可完成適配,而且在寬高限定符適配方案的基礎(chǔ)上更近一步蜂桶,完美解決了容錯(cuò)機(jī)制的問題儡毕,讓開發(fā)更加的高效。

那這個(gè)方案有沒缺點(diǎn)呢扑媚?

當(dāng)然也是有的腰湾,首先是這個(gè)UI適配框架已經(jīng)停止適配贾费,這也意味著一旦這個(gè)框架在使用過程中遇到難以解決的問題,替換起來會(huì)非常的麻煩且耗精力檐盟,當(dāng)然如果你已經(jīng)熟悉了這套源碼除外哈褂萧。

4、sw限定符適配方案

sw限定符適配即smallestWidth適配葵萎,也叫最小寬度限定符適配导犹,指的是Android會(huì)識(shí)別到屏幕可用高度或?qū)挾鹊淖钚〕叽绲膁p值,對(duì)于手機(jī)來說羡忘,這個(gè)值其實(shí)就是手機(jī)的寬度值谎痢,而對(duì)于平板來說,這個(gè)值就是平板的高度值卷雕。然后根據(jù)識(shí)別到的結(jié)果去資源文件中尋找對(duì)應(yīng)限定符文件夾下的資源文件节猿。其實(shí)這種適配方案跟之前介紹的寬高限定符適配方案原理是一樣一樣的,都是系統(tǒng)通過特定的規(guī)則來找到對(duì)應(yīng)的資源文件漫雕。

我們先來看一下資源文件滨嘱,這份是通過插件生成的以375dp為基準(zhǔn)的資源文件,插件的使用后面會(huì)介紹浸间,如圖所示:

image

舉例說明:比如我有臺(tái)測(cè)試機(jī)為小米太雨,手機(jī)分辨率為1080x1920,屏幕像素密度為480魁蒜,根據(jù)最小寬度限定符適配方案囊扳,該手機(jī)最小寬度為1080px,再根據(jù)px=dp(dpi/160)兜看,橫向的dp值是1080/(480/160)锥咸,也就是360dp,根據(jù)這個(gè)結(jié)果系統(tǒng)就會(huì)去資源文件中尋找values-sw360dp文件夾下的資源文件细移,如圖所示:
image

前面說了搏予,該方案的原理跟寬高限定符適配方案是一樣的,所以也需要提前設(shè)置基準(zhǔn)尺寸葫哗,比如我這里以375dp為基準(zhǔn)缔刹,即將任何分辨率的寬度分為375份,我們來看看基準(zhǔn)資源文件劣针,如圖所示:
image

我們?cè)倌蒙厦嫘∶资謾C(jī)舉例說明,我們來看看values-sw360dp文件夾下的資源文件亿扁,如圖所示:
image

那么這份數(shù)據(jù)是怎么計(jì)算得到的呢捺典,當(dāng)然也是在基準(zhǔn)尺寸的基礎(chǔ)上計(jì)算得到的,即:
dp_1=(360/基準(zhǔn))1=(360/375)1=0.96dp

dp_2=(360/基準(zhǔn))2=(360/375)2=1.92dp

...

dp_375=(360/基準(zhǔn))375=(360/375)375=360dp

其它手機(jī)尺寸也是同理這樣計(jì)算得到的从祝。

那下面來看看資源文件是怎么生成的襟己?

實(shí)現(xiàn)步驟:

1引谜、在Android studio中安裝ScreenMatch插件

點(diǎn)擊菜單欄上的 File -> Settings -> Plugins ,搜索ScreenMatch關(guān)鍵字擎浴,安裝插件员咽,安裝成功后,點(diǎn)擊 “OK”贮预,重啟 Andorid Studio 即可贝室,如圖所示:


image

2、在項(xiàng)目values文件夾下需要一份dimens.xml文件仿吞,即前面說的默認(rèn)基準(zhǔn)尺寸文件滑频,如圖所示:


image

3、插件安裝后唤冈,在項(xiàng)目的任意目錄或文件上右鍵峡迷,選擇 ScreenMatch 選項(xiàng),如圖所示:
image

4你虹、然后選擇需要適配的module 绘搞,我這里測(cè)試只有一個(gè),如圖所示:


image

5傅物、點(diǎn)擊 OK后 看杭,出現(xiàn)如下彈窗即表示生成資源文件成功,如圖所示:
image

通過以上的步驟res 目錄下就生成了默認(rèn)尺寸的所有資源文件啦挟伙。

上面步驟是以最小寬度基準(zhǔn)值為375dp楼雹,適配的設(shè)備最小寬度為:240,320,384,392,400,410,411,480,533,592,600,640,662,720,768,800,811,820,960,961,1024,1280,1365生成的文件,當(dāng)然實(shí)際開發(fā)需要根據(jù)設(shè)計(jì)圖需求進(jìn)行設(shè)置尖阔,這個(gè)時(shí)候就需要更改基準(zhǔn)值及需要適配的適配啦贮缅,那下面看看怎么更改的。

例如現(xiàn)在UI的設(shè)計(jì)圖最小寬度為360dp介却,則需要更改最小寬度基準(zhǔn)值為 360dp谴供。假如我們需要適配的設(shè)備最小寬度保留 320,360,384,392,400,410,411,480即可,如果還需要添加其他最小寬度的設(shè)備自行加上即可齿坷,首先我們需要找到插件的screenMatch.properties配置文件并打開桂肌,如圖所示:


image

然后我們需要在配置文件修改,修改下圖中 1永淌、3崎场、4處的值即可,如圖所示:


image

值得注意的是上圖設(shè)置的值單位都為dp遂蛀。

我們?cè)賮砜纯?谭跨、2、3、4表示什么意思:
1螃宙、表示最小寬度基準(zhǔn)值蛮瞄,填寫設(shè)計(jì)圖的最小寬度值即可。
2谆扎、表示插件默認(rèn)適配的最小寬度值挂捅,即默認(rèn)情況下會(huì)生成如下值的 dimens.xml 文件。
3堂湖、表示需要適配的最小寬度值闲先,即你想生成哪些 dimens.xml 文件。
4苗缩、忽略不需要適配的最小寬度值饵蒂,即忽略掉插件默認(rèn)生成的 dimens.xml 文件。

修改完配置文件后酱讶,重新執(zhí)行步驟3就會(huì)生成新的資源文件退盯。

我們?cè)賮砜匆幌聅w限定符適配方案的優(yōu)點(diǎn):
sw限定符適配方案和寬高限定符適配方案最大的區(qū)別在于:前者有很好的容錯(cuò)機(jī)制,如果沒有value-sw360dp文件夾泻肯,系統(tǒng)會(huì)向下尋找渊迁,比如離360dp最近的只有value-sw350dp,那么Android就會(huì)選擇value-sw350dp文件夾下面的資源文件灶挟。這個(gè)特性就完美的解決了寬高限定符適配方案的容錯(cuò)問題琉朽。而且sw限定符適配方案非常穩(wěn)定,極低概率出現(xiàn)意外稚铣。在插件的配合下箱叁,學(xué)習(xí)成本也比較低。

那這種方案有沒缺點(diǎn)呢惕医?當(dāng)然也是有的

  • 最明顯的肯定也是占用資源大耕漱,會(huì)增加APK的體積
  • 在布局中引用dimens的方式,在維護(hù)過程中修改會(huì)比較麻煩抬伺。
  • 侵入性高螟够,比如想切換其它適配方案,由于每個(gè)layout文件中有大量的dimens引用峡钓,修改起來工作量會(huì)非常巨大妓笙,切換成本非常高。

為了防止篇幅過長(zhǎng)能岩,這里就先介紹這兩種適配方案寞宫,后面幾種后面會(huì)一一解析,敬請(qǐng)期待捧灰。歡迎關(guān)注公眾號(hào)【龍旋】能獲取最新更新內(nèi)容哦淆九。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末统锤,一起剝皮案震驚了整個(gè)濱河市毛俏,隨后出現(xiàn)的幾起案子炭庙,更是在濱河造成了極大的恐慌,老刑警劉巖煌寇,帶你破解...
    沈念sama閱讀 221,820評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件焕蹄,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡阀溶,警方通過查閱死者的電腦和手機(jī)腻脏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來银锻,“玉大人永品,你說我怎么就攤上這事』魑常” “怎么了鼎姐?”我有些...
    開封第一講書人閱讀 168,324評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)更振。 經(jīng)常有香客問我炕桨,道長(zhǎng),這世上最難降的妖魔是什么肯腕? 我笑而不...
    開封第一講書人閱讀 59,714評(píng)論 1 297
  • 正文 為了忘掉前任献宫,我火速辦了婚禮,結(jié)果婚禮上实撒,老公的妹妹穿的比我還像新娘姊途。我一直安慰自己,他們只是感情好知态,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,724評(píng)論 6 397
  • 文/花漫 我一把揭開白布捷兰。 她就那樣靜靜地躺著,像睡著了一般肴甸。 火紅的嫁衣襯著肌膚如雪寂殉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,328評(píng)論 1 310
  • 那天原在,我揣著相機(jī)與錄音友扰,去河邊找鬼。 笑死庶柿,一個(gè)胖子當(dāng)著我的面吹牛村怪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播浮庐,決...
    沈念sama閱讀 40,897評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼甚负,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柬焕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起梭域,我...
    開封第一講書人閱讀 39,804評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤斑举,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后病涨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體富玷,經(jīng)...
    沈念sama閱讀 46,345評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,431評(píng)論 3 340
  • 正文 我和宋清朗相戀三年既穆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赎懦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,561評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡幻工,死狀恐怖励两,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情囊颅,我是刑警寧澤当悔,帶...
    沈念sama閱讀 36,238評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站迁酸,受9級(jí)特大地震影響先鱼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奸鬓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,928評(píng)論 3 334
  • 文/蒙蒙 一焙畔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧串远,春花似錦宏多、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至留搔,卻和暖如春更胖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背隔显。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工却妨, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人括眠。 一個(gè)月前我還...
    沈念sama閱讀 48,983評(píng)論 3 376
  • 正文 我出身青樓彪标,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親掷豺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捞烟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,573評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容