Android屏幕適配

Android屏幕適配

概述

屏幕適配的主要目標有兩個,不同屏幕尺寸的適配和不同像素密度的適配。隨著手機行業(yè)發(fā)展異形屏也開始流行,異形屏幕適配也日漸重要(Android 9 (API level 28)開始提供官方支持)。

適配不同的屏幕尺寸

適配方法:

  1. RelativeLayout可以在不同尺寸的屏幕上保留視圖組件的空間位置關(guān)系
  2. 使用尺寸限定符(layout-large)針對不同尺寸屏幕提供多種備選布局
  3. 使用最小寬度限定符(layout-sw600dp,寬度大于等于600dp的屏幕,需要Android3.2及以上系統(tǒng))針對不同尺寸屏幕提供多種備選布局。
  4. 使用屏幕方向限定符針對不同尺寸和方向的屏幕提供多種備選布局。
  5. 使用九宮格位圖(.9)支持尺寸可能改變的視圖組件顯示圖像資源

適配不同的屏幕密度

密度無關(guān)單位:dp(設(shè)備獨立像素)或sp(縮放獨立像素),不同像素密度下可以提供相同的物理尺寸顯示效果。

  • dpi:設(shè)備像素密度,這是一個軟件系統(tǒng)中的概念,用于代表設(shè)備像素密度的一個級別。是可以修改的
  • ppi:物理像素密度,這是硬件中的參數(shù),代表每英寸屏幕的像素個數(shù)。不能修改,只和屏幕物理特性有關(guān)。一般一定范圍內(nèi)的ppi對應(yīng)同一個dpi。
  • px:像素pixel的簡寫,代表屏幕的一個像素點
  • dp:像素密度無關(guān)的一個單位,代表160dpi下的屏幕物理尺寸,dp=(dpi/160)*px,在不同像素密度下1dp對應(yīng)不同的像素(px)值。
  • sp:scaled pixels,縮放像素,用于文字大小適配。sp會跟隨系統(tǒng)字體設(shè)置大小進行縮放。

適配方法:

  1. 使用分辨率無關(guān)計量單位dp/sp適配不同屏幕密度
  2. 提供針對不同屏幕像素密度的備用位圖資源(ldpi-0.75 mdpi-1.0 hdpi-1.5 xhdpi-2.0 xxhdpi-3.0 xxxhdpi-4.0)

一些原則

  • 避免對界面組件的大小和位置進行硬編碼
  • 使用布局別名減少重復(fù)的布局文件。

適配方案

  1. 寬高限定符適配

    Android中有提供了一種關(guān)于尺寸的資源類型,Dimension,她可以定義一系列數(shù)值單位的尺寸值,可以使dp、px、sp、pt、mm、in中的一種,位于res/values/filename.xml下,資源可以通過一些限定符指定給不同的尺寸、像素密度的設(shè)備使用。所以我們可以根據(jù)寬高限定符生成多套Dimension資源文件針對不同屏幕下的尺寸,文件一般類似:values-480x320。一般是以某一像素密度下的尺寸為基準,其他密度按照比例進行縮放。寬高限定符的特點是只針對指定分辨率的屏幕。所以想要完美的適配所有屏幕就需要窮舉市面上所有尺寸的屏幕才可以達到預(yù)想效果。

  2. smallestWidth適配-最小寬度適配

    Android中提供了最小寬度限定符,可以識別屏幕可用寬度和高度中較小的一個,指定一個尺寸最為接近的資源文件(默認會使用不大于自身寬度dp值的資源文件),一般是XX-swxxdp。針對寬高限定符只針對一種尺寸的缺陷,最小寬度則是匹配最接近的尺寸。很明顯這些資源文件是可以自動生成的:https://github.com/ladingwu/dimens_sw

    以上兩種方案都會增大APK文件的大小,根據(jù)資源文件的多寡,會增大幾十K到幾百K不等。

  3. 字節(jié)跳動適配方案

    文章:一種極低成本的Android屏幕適配方式

    該方案通過強制修改設(shè)備中代表dpi的屬性densityDpi和dp px轉(zhuǎn)換關(guān)系的density和sp px轉(zhuǎn)換關(guān)系的scaledDensity,達到統(tǒng)一不同設(shè)備尺寸(這里只是統(tǒng)一寬度或者高度一個維度)的目的,這樣的適配成本最低,由于修改也是使用公開的api,穩(wěn)定性也不成問題。

    原理:

    當我們使用dp、sp作為尺寸單位時,實際顯示的像素尺寸根據(jù)公式:px=(dpi/160)*dp計算,在默認情況下density=dpi/160,根據(jù)設(shè)計稿給出的值和屏幕的實際像素寬度或者像素高度計算出一個比例值作為density的值,這樣在不同尺寸的屏幕上直接使用設(shè)計稿數(shù)值就可以按照百分比填充屏幕。

參考文檔

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

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

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