寫在開篇之前
親愛的小伙伴們,我想死你們啦妈橄,哈哈庶近。。嗨大家好眷蚓,我是WebberCao鼻种,中文名:江戶川米蘭。愛柯南沙热,愛米蘭叉钥,請(qǐng)叫我江戶川米蘭。Yeah篙贸!之前一直都是混CSDN的投队,也寫過一些比較水的博客,但自從看了一些在簡(jiǎn)書上發(fā)表的文章之后爵川,便被這種舒服的排版以及愉悅的寫作體驗(yàn)深深的吸引住了蛾洛。So,果斷的投入到了簡(jiǎn)書的懷抱雁芙。把之前我感覺有一定保留價(jià)值的文章搬到了這里來分享給大家轧膘,也當(dāng)是自己再?gòu)?fù)習(xí)一下。
好了兔甘,簡(jiǎn)短的自我介紹之后谎碍,開始今天的主題。開篇第一彈洞焙,肯定要直接上干貨了蟆淀。作為一個(gè)苦逼的Android程序猿,在面試的時(shí)候澡匪,我想不論你是面試的初級(jí)還是中級(jí)或者高級(jí)開發(fā)熔任,肯定都會(huì)被問到關(guān)于手機(jī)屏幕適配方面的問題,這個(gè)問題乍一聽感覺很寬泛唁情,一時(shí)不知道該從哪開始說起疑苔。剛開始我也被這個(gè)問題問倒過,因?yàn)樵趺凑f呢甸鸟,這其實(shí)不是一個(gè)技術(shù)問題惦费,而是在開發(fā)過程中總結(jié)出來的一些經(jīng)驗(yàn)兵迅。下面就是我關(guān)于Android手機(jī)屏幕適配的一些總結(jié)。
在此之前薪贫,有兩個(gè)需要了解的概念恍箭,就是手機(jī)的像素密度(dpi),以及縮放因子瞧省。
像素密度:手機(jī)單位長(zhǎng)度上的像素?cái)?shù)扯夭。
比如:
手機(jī)像素是:1280*720 ? 尺寸是:5寸(屏幕對(duì)角線的長(zhǎng)度)
像素密度:1280*1280+720*720,然后開根號(hào)(不好意思鞍匾,第一次用簡(jiǎn)書勉抓,不是太會(huì)用),得出來的數(shù)除以5候学,就得到像素密度了,大概是293dpi纵散。在240dpi~320dpi之間梳码,屬于xhdpi。
縮放因子:其實(shí)就是dp和ps的對(duì)應(yīng)關(guān)系伍掀。
mdpi:? 1dp = 1px
ldpi:? 1dp = 0.75px
hdpi:? 1dp = 1.5px
xhdpi: 1dp = 2px
在了解了上面兩個(gè)概念之后掰茶,我們可以從以下幾個(gè)方面進(jìn)行考慮:
1、圖片適配
根據(jù)手機(jī)的像素密度選擇對(duì)應(yīng)文件夾中的圖片蜜笤。
顯示圖片時(shí)濒蒋,根據(jù)手機(jī)的像素密度自動(dòng)加載對(duì)應(yīng)drawable文件夾中的圖片,如果沒有把兔,則會(huì)去加載高分辨drawable-hdpi文件夾中的圖片沪伙,或者更高分辨率文件夾中的圖片,如果都沒有县好,才會(huì)加載低分辨率文件夾中的圖片围橡。這就是為什么當(dāng)我們只有一套圖的時(shí)候會(huì)直接把圖片拷到drawable-hdpi文件夾中的原因。
2缕贡、Dimens適配
根據(jù)手機(jī)的像素密度來選擇對(duì)應(yīng)文件夾中的尺寸大小翁授。在res目錄中創(chuàng)建values-xhdpi文件夾,在此文件夾中創(chuàng)建dimens.xml文件晾咪,然后聲明dimens資源收擦。
<resourcese>
<dimen name="text_width">160dp</dimen>
</resourcese>
首先會(huì)根據(jù)手機(jī)的像素密度找對(duì)應(yīng)文件夾中的尺寸資源,如果沒有谍倦,則會(huì)去找默認(rèn)的尺寸資源塞赂。當(dāng)然在我們平常開發(fā)的時(shí)候沒必要為每個(gè)尺寸都在資源文件中設(shè)置不同的尺寸文件夾,dimens適配一般是在測(cè)試階段根據(jù)需要對(duì)部分尺寸進(jìn)行不同手機(jī)的屏幕適配昼蛀。
3减途、布局適配
根據(jù)手機(jī)的像素密度選擇對(duì)應(yīng)文件夾中的布局酣藻。
創(chuàng)建不同像素密度的布局文件,例如layout-xhdpi鳍置,然后把布局文件放到相應(yīng)的layout文件夾中辽剧。但是這種方法在后期維護(hù)的時(shí)候相當(dāng)麻煩,因?yàn)槿绻硞€(gè)頁(yè)面有個(gè)地方改動(dòng)了一下税产,則對(duì)應(yīng)所有布局文件夾中的布局頁(yè)面都需要修改怕轿,很容易造成混亂。所以雖然在以前這是官方比較推薦的適配方案辟拷,但現(xiàn)在已經(jīng)顯然很少使用了撞羽。
4、代碼適配
在代碼中動(dòng)態(tài)的設(shè)置控件的尺寸衫冻。
通過LayoutParams來設(shè)置控件的寬高值诀紊。(在代碼中指定的寬高值都是px)
代碼適配一般在自定義控件中使用的比較多。
5隅俘、Layout_weight適配
通過設(shè)置權(quán)重比例來進(jìn)行適配邻奠。
在頁(yè)面布局文件中通過layout-weight設(shè)置權(quán)重來進(jìn)行設(shè)置控件在屏幕中所占比例。
注意:當(dāng)寬或者是高設(shè)成權(quán)重之后为居,相應(yīng)的layout-width或layout-height應(yīng)該設(shè)置成0dp碌宴。
相信通過以上幾個(gè)方面進(jìn)行屏幕適配之后,我們的APP可以說是大小通吃蒙畴,萬(wàn)能適配贰镣。哈哈,開玩笑的了膳凝,不過終于完成了在簡(jiǎn)書上的第一篇文章碑隆,因?yàn)榇蠹业臅r(shí)間都很寶貴,所以都是挑的重點(diǎn)蹬音,寫的比較簡(jiǎn)短干跛,希望大家能夠喜歡,最后祝大家工作愉快祟绊,開心每一天楼入!^_^