屏幕適配
養(yǎng)成良好的開發(fā)習(xí)慣://面試
多用dp,sp,不用px; //sp是奇數(shù)和小數(shù)容易造成精度丟失
多用線性布局和相對(duì)布局, 不用絕對(duì)布局;
代碼中如果必須設(shè)置像素的話, 將dp轉(zhuǎn)為px進(jìn)行設(shè)置
概念:
屏幕尺寸:屏幕對(duì)角線的長(zhǎng)度胎围,單位是英寸,1 inch=2.54 cm
屏幕大小:物理屏幕的大小,看屏幕的對(duì)角線
分辨率 :實(shí)際上是像素的總和, 比如1280*720.1px=1個(gè)像素點(diǎn)
dpi :屏幕像素密度(每英寸所展示的像素,屏幕像素密度與屏幕尺寸和屏幕分辨率有關(guān). 屏幕尺寸越小柱衔、分辨率越高嚼贡,像素密度越大捉片,反之越小秩霍。)
dp(dip) :屏幕密度無關(guān)像素
sp :獨(dú)立比例像素
px :像素的單位. 比如UI設(shè)計(jì)齐婴、Android原生API都會(huì)以px作為統(tǒng)一的計(jì)量單位茄厘,像是獲取屏幕寬高等
- 比率(根據(jù)dpi計(jì)算)
分辨率
ldpi: 240*320 QVGA 0.75 ~120dpi
mdpi: 320*240 HVGA 1 ~160dpi Android中標(biāo)準(zhǔn)的分辨率//baseline//1dp=1px
hdpi: 480*800 WVGA 1.5 ~240dpi
xhdpi: 1280*720 720P 2 ~320dpi
xxhdpi: 1920*1080 1080p 3 ~480dpi
xxxhdpi:3840×2160 4K 4 ~640dpi
(最后面附上dpi的計(jì)算)
屏幕適配問題的本質(zhì)
使得“布局”矮冬、“布局組件”、“圖片資源”次哈、“用戶界面流程”匹配不同的屏幕尺寸
根據(jù)屏幕的配置來加載相應(yīng)的UI布局胎署、用戶界面流程
使得“圖片資源”匹配不同的屏幕密度
解決方案
全集:
主要:
圖片適配
常規(guī)做法: 做一套圖 1280*720 切圖, 放在hdpi或xhdpi下, ImageView寬高指定為確定的值, 不包裹屏幕.
如果某個(gè)屏幕出了問題, 再針對(duì)該屏幕, 對(duì)相關(guān)出問題的圖片進(jìn)行替換.
layout布局文件適配(不太常用)
layout-800x480:專門針對(duì)480*800屏幕適配的布局文件, 一般只調(diào)整位置和大小, 不建議對(duì)控件類型和個(gè)數(shù)進(jìn)行調(diào)整
尺寸適配(dimens,很常用)
//dp 和 px
dp = px/設(shè)備密度
設(shè)備密度:float density = getResources().getDisplayMetrics().density;
創(chuàng)建文件夾values-1280x720, 在dimens.xml中制定尺寸, 適配屏幕
//values-1280x720/dimens.xml
常規(guī)做法: 此方法比布局適配更常用. 美工提供像素px值, 我們使用前需要用px除以設(shè)備密度,轉(zhuǎn)換成dp后,寫在布局文件中
權(quán)重適配
android:weightSum="3"http://父控件給予總和
常規(guī)做法: 當(dāng)布局有嚴(yán)格比例分配時(shí), 可以使用權(quán)重來處理
權(quán)重weight的計(jì)算
寬度 = 原來寬度 + 權(quán)重比值 * 剩余寬度
[1]當(dāng)layout_width為0dp,layout_weight分別是1和2
第一個(gè)按鈕:寬度 = 0 + 1/3 * 屏寬 = 1/3屏寬
第二個(gè)按鈕:寬度 = 0 + 2/3 * 屏寬 = 2/3屏寬
[2]當(dāng)layout_width為match_parent, layout_weight分別是1和2
第一個(gè)按鈕:寬度 = 屏寬 + 1/3 (屏寬 - 2 屏寬) = 2/3屏寬
第二個(gè)按鈕:寬度 = 屏寬 + 2/3 (屏寬 - 2 屏寬) = 1/3屏寬
代碼適配
通過LayoutParams//由這個(gè)空間的父控件來決定這個(gè)LayoutParams是誰的
常規(guī)做法: 如果是自定義的控件, 沒有使用xml布局文件時(shí), 可以在代碼中動(dòng)態(tài)設(shè)置寬高
其他適配補(bǔ)充
布局控件匹配
使用相對(duì)布局(RelativeLayout)窑滞,禁用絕對(duì)布局(AbsoluteLayout)
尺寸(size)限定符(large)
只適合Android 3.2版本之前
在平板電腦和電視的屏幕(>7英寸)上:實(shí)施“雙面板”模式以同時(shí)顯示更多內(nèi)容
雙面板布局:res/layout-large/main.xml
在手機(jī)較小的屏幕上:使用單面板分別顯示內(nèi)容
單面板(默認(rèn))布局:res/layout/main.xml
注意:兩個(gè)布局XML名稱均為main.xml
最小寬度(Smallest-width)限定符
適合在Android 3.2及之后版本
是以dp為標(biāo)準(zhǔn)的.
適配尺寸>7寸平板的雙面板布局:res/layout-sw600dp/main.xml
對(duì)于最小寬度≥ 600 dp 的設(shè)備
適配手機(jī)的單面板(默認(rèn))布局:res/layout/main.xml
注意:兩個(gè)布局XML名稱均為main.xml
- Android AutoLayout:
Android AutoLayout全新的適配方式