Android屏幕適配

屏幕適配

養(yǎng)成良好的開發(fā)習(xí)慣://面試
    多用dp,sp,不用px; //sp是奇數(shù)和小數(shù)容易造成精度丟失
    多用線性布局和相對布局, 不用絕對布局; 
    代碼中如果必須設(shè)置像素的話, 將dp轉(zhuǎn)為px進(jìn)行設(shè)置

概念:
    屏幕尺寸:屏幕對角線的長度,單位是英寸,1 inch=2.54 cm
    屏幕大小:物理屏幕的大小,看屏幕的對角線
    分辨率 :實(shí)際上是像素的總和, 比如1280*720.1px=1個(gè)像素點(diǎn)
    dpi     :屏幕像素密度(每英寸所展示的像素,屏幕像素密度與屏幕尺寸和屏幕分辨率有關(guān).  屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。)
    dp(dip) :屏幕密度無關(guān)像素   
    sp      :獨(dú)立比例像素
    px      :像素的單位. 比如UI設(shè)計(jì)、Android原生API都會以px作為統(tǒng)一的計(jì)量單位,像是獲取屏幕寬高等
  • 比率(根據(jù)dpi計(jì)算)
1.jpg
        分辨率         
    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
1.png

(最后面附上dpi的計(jì)算)

屏幕適配問題的本質(zhì)

使得“布局”、“布局組件”、“圖片資源”、“用戶界面流程”匹配不同的屏幕尺寸 
    根據(jù)屏幕的配置來加載相應(yīng)的UI布局、用戶界面流程    
使得“圖片資源”匹配不同的屏幕密度

解決方案

全集:

1.png

主要:

圖片適配
    常規(guī)做法: 做一套圖 1280*720 切圖, 放在hdpi或xhdpi下, ImageView寬高指定為確定的值, 不包裹屏幕. 
                如果某個(gè)屏幕出了問題, 再針對該屏幕, 對相關(guān)出問題的圖片進(jìn)行替換.


layout布局文件適配(不太常用)
    layout-800x480:專門針對480*800屏幕適配的布局文件, 一般只調(diào)整位置和大小, 不建議對控件類型和個(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í), 可以在代碼中動態(tài)設(shè)置寬高

其他適配補(bǔ)充

布局控件匹配
    使用相對布局(RelativeLayout),禁用絕對布局(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
            對于最小寬度≥ 600 dp 的設(shè)備
        適配手機(jī)的單面板(默認(rèn))布局:res/layout/main.xml
        注意:兩個(gè)布局XML名稱均為main.xml

dpi的計(jì)算

1.jpg
2.png
3.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容