由于安卓的開源,各種設(shè)備的尺寸也是五花八門,我們無法做到任何設(shè)備都適配(特殊要求除外),所以只能針對目前比例最大的幾種機(jī)型進(jìn)行適配
首先普及幾個(gè)概念
px是構(gòu)成圖片的最小單位,dpi是像素密度,對角線的像素除以長度,dip(也叫作dp)是密度無關(guān)像素,160dpi的設(shè)備上,1dip=1px。1dip 所等于的px和dpi成正比,也就是說在320dpi的設(shè)備上,1dip=2px。
sp可以根據(jù)文字大小首選項(xiàng)進(jìn)行放縮,谷歌官方推薦使用sp作為字體的單位,應(yīng)該使用12sp以上且為偶數(shù)作為字體大小,否側(cè)可能看不清或者放縮時(shí)可能造成精度的丟失
| 名稱 | 像素密度范圍 |
|---|---|
| mdpi | 120dpi~160dpi |
| hdpi | 160dpi~240dpi |
| xhdpi | 240dpi~320dpi |
| xxdpi | 320dpi~480dpi |
| xxxhdpi | 480dpi~640dpi |
支持各種屏幕尺寸的工作主要有以下幾個(gè)方面
1. 使用wrap_contnet、math_parent、weight
2. 使用相對布局,禁止絕對布局
3. 使用限定符
4. 使用自動(dòng)拉伸位圖
1.使用wrap_contnet、math_parent、weight
在LinearLayout時(shí),如果想兩邊的控件大小固定,中間的控件填充剩下的空間,可以設(shè)置中間控件的weight為1,其他兩個(gè)不設(shè)或者設(shè)為0。
如果設(shè)置了weight最好把想高度或者寬度設(shè)為0,比如想橫向用weight,那么就把寬度設(shè)為0,設(shè)為0后寬度或者高度和weight成等比例,weight越大寬度或者高度越大。
如果兩個(gè)控件設(shè)置了math_parent和weight的話
weight計(jì)算出來的高度=原來寬度+剩余空間*weight所占百分比
如
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="button1"/>
<Button
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="button"/>
</LinearLayout>
設(shè)L是屏幕寬度,Button1現(xiàn)在的寬度是2/3L,他原來的寬度應(yīng)該是L,剩下的寬度是L-2L,然后它weight所占百分比是1/3
2/3L=L+(L-2L)*1/3
2. 使用相對布局,禁用絕對布局
如果是按照比例擺放的就用線性布局,如果要控件之間有特殊要求的就用相對布局
3.使用限定符
使用尺寸限定符,在values文件夾加上尺寸,然后應(yīng)用可以根據(jù)不同設(shè)備尺寸選擇,如values-480x320
4.使用自動(dòng)拉伸
.9圖左邊和上邊是拉伸區(qū)域,下邊和右邊是padding區(qū)域
在左邊和上邊設(shè)的點(diǎn)所在的線會被拉伸,下邊和右邊所設(shè)的線的交叉區(qū)域保持和圓圖相同的padding
.9圖要在保留圖片的兩側(cè)點(diǎn)相同的點(diǎn),線不要穿過圖片,線上點(diǎn)會被拉伸,若某邊不需要拉伸可以不設(shè)點(diǎn)
最后放一個(gè)鴻洋大大的彩蛋