由于安卓的開源窿侈,各種設(shè)備的尺寸也是五花八門,我們無法做到任何設(shè)備都適配(特殊要求除外),所以只能針對目前比例最大的幾種機型進(jìn)行適配
首先普及幾個概念
px是構(gòu)成圖片的最小單位,dpi是像素密度迎瞧,對角線的像素除以長度,dip(也叫作dp)是密度無關(guān)像素逸吵,160dpi的設(shè)備上凶硅,1dip=1px。1dip 所等于的px和dpi成正比扫皱,也就是說在320dpi的設(shè)備上足绅,1dip=2px。
sp可以根據(jù)文字大小首選項進(jìn)行放縮啸罢,谷歌官方推薦使用sp作為字體的單位编检,應(yīng)該使用12sp以上且為偶數(shù)作為字體大小,否側(cè)可能看不清或者放縮時可能造成精度的丟失
名稱 | 像素密度范圍 |
---|---|
mdpi | 120dpi~160dpi |
hdpi | 160dpi~240dpi |
xhdpi | 240dpi~320dpi |
xxdpi | 320dpi~480dpi |
xxxhdpi | 480dpi~640dpi |
支持各種屏幕尺寸的工作主要有以下幾個方面
1. 使用wrap_contnet扰才、math_parent允懂、weight
2. 使用相對布局,禁止絕對布局
3. 使用限定符
4. 使用自動拉伸位圖
1.使用wrap_contnet衩匣、math_parent蕾总、weight
在LinearLayout時,如果想兩邊的控件大小固定琅捏,中間的控件填充剩下的空間生百,可以設(shè)置中間控件的weight為1,其他兩個不設(shè)或者設(shè)為0柄延。
如果設(shè)置了weight最好把想高度或者寬度設(shè)為0蚀浆,比如想橫向用weight,那么就把寬度設(shè)為0搜吧,設(shè)為0后寬度或者高度和weight成等比例市俊,weight越大寬度或者高度越大。
如果兩個控件設(shè)置了math_parent和weight的話
weight計算出來的高度=原來寬度+剩余空間*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.使用自動拉伸
.9圖左邊和上邊是拉伸區(qū)域,下邊和右邊是padding區(qū)域
在左邊和上邊設(shè)的點所在的線會被拉伸领炫,下邊和右邊所設(shè)的線的交叉區(qū)域保持和圓圖相同的padding
.9圖要在保留圖片的兩側(cè)點相同的點汉规,線不要穿過圖片,線上點會被拉伸,若某邊不需要拉伸可以不設(shè)點
最后放一個鴻洋大大的彩蛋