android 屏幕適配機制

I.引入

資源文件適配,其中包含衆多內容,如值適配,語言適配,

首先打開文件夾生成界面,右擊工程目錄  -> New -> Android Resource Directory      

添加資源文件夾的界面如下:

Resource type 包含所有的資源文件類型,如layout,value,mipmap,xml,color,anim...還有raw;就是所有資源文件可以適配
Source set 默認爲main(),爲build.gradle 中 buildTypes和 produceFlavors 的交叉組合
Acailable set 截圖中爲所有可選類型,包含屏幕寬,屏幕高,橫豎屏,版本,佈局方向,像素大小等
Choose qualifiers 可以多選,條件爲合併關係,如圖 會生成  values-long-port 文件夾,表示寬屏並且豎屏時引用(迷糊?看資源介紹)

通常 Resource type 配合 Acailable set , 即可做絕大多數適配,少數的調試值,渠道區分會使用Source set !!!

更多資源文件的內容可以看我的筆記:https://blog.csdn.net/qq_19973845/article/details/103459712

抽個重點:


Android 如何查找最佳匹配資源

當您請求要爲其提供備用資源的資源時,Android 會根據當前的設備配置選擇要在運行時使用的備用資源。爲演示 Android 如何選擇備用資源,假設以下可繪製對象目錄分別包含相同圖像的不同版本:

1.drawable/
2.drawable-en/
3.drawable-fr-rCA/
4.drawable-en-port/
5.drawable-en-notouch-12key/
6.drawable-port-ldpi/
7.drawable-port-notouch-12key/

這裏尋找資源的順序只能是7->6->5->4->3->2->1,絕不會倒過來,

那麼特別注意: layout,drawable,value,等等絕對不會升級尋找!

 但是layout,drawable,value之間的的引用值卻是相對獨立的,比如layout下引用了@dimen/buttonHeight,在value和value-sw600dp下均創建該值,運行在平板中則是引用value-sw600dp下的@dimen/buttonHeight,運行在手機上則是value中的!


II.屏幕適配

屏幕適配是android 衆多適配中的重要一角,與之相照應的是value,layout,color,drawable,mipmap的配套.

1.屏幕適配的關鍵因素:橫豎屏,屏幕大小,像素密度

橫豎屏:就兩種情況,通常在適配也是在橫屏情況下做成平板一樣的左右佈局

屏幕大小:  在這裏 通常用於判斷是否爲平板,先繼續看...

下面是其他最小寬度值與典型屏幕尺寸的對應關係:

  • 320dp:典型手機屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)。
  • 480dp:約爲 5 英寸的大手機屏幕 (480x800 mdpi)。
  • 600dp:7 英寸平板電腦 (600x1024 mdpi)。 -->(註釋:我發現M3 8.4寸平板<顯示模式爲 大[有 小,中,大]>居然是534dp)
  • 720dp:10 英寸平板電腦(720x1280 mdpi、800x1280 mdpi 等)。

下面提供了一個更詳細的視圖,說明了不同屏幕 dp 寬度與不同屏幕尺寸和方向的一般對應關係。

典型的平板電腦測試環境可以包含下表中每行的一種或兩種設備,採用所列的一種平臺版本、屏幕配置和硬件功能配置。

類型 尺寸 密度 版本 AVD 主題
7 英寸平板電腦 large 或
-sw600
hdpi
tvdpi

Android 4.0 及更高版本

(API 級別 14 及更高)

WXGA800-7in
10 英寸平板電腦 xlarge 或
-sw800
mdpi
hdpi
xhdpi

Android 3.2 及更高版本

(API 級別 13 及更高)

WXGA800

做平板適配的根據:

在模擬器中window 爲large是就爲平板,而真機則不能正確識別,甚至xlarge都沒有效果;

這裏還是得使用 最小dp寬度來最區分,模擬器,真機均能正確識別;


像素密度: 像素密度的適配爲了 正確的加載正確大小的圖片,避免系統放大或壓縮圖片導致圖片不清晰;

有一個公式是px(像素)與dp(密度無關像素 )的轉化關係:px = dp * (dpi / 160)

dpi:圖像每英寸長度內的像素點數。

dp:xml佈局中的使用單位

px:就是像素🌶

這裏有一個示例:

在自定義View時,通常有手勢的相應,而何時響應則需要我們計算,因爲xml中我們設置的是dp,而代碼中獲取的是px,

假定用戶滑動16dp ,應當響應手勢,我們則需要計算出在設備中對應的像素值,代碼如下:

    // The gesture threshold expressed in dp
    private static final float GESTURE_THRESHOLD_DP = 16.0f;

    // Get the screen's density scale
    final float scale = getResources().getDisplayMetrics().density;
    // Convert the dps to pixels, based on density scale
    mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f);

 不同像素密度下建議的圖片文件夾(drawable,mipmap),及其大小

 

36x36 (0.75x) 

48x48(1.0x 基準)

72x72 (1.5x) 

96x96 (2.0x) 

144x144 (3.0x) 

192x192 (4.0x) 
低密度 (ldpi) 中密度 (mdpi) 高密度 (hdpi) 超高密度 (xhdpi) 超超高密度 (xxhdpi) 超超超高密度 (xxxhdpi)

 

發佈了10 篇原創文章 · 獲贊 2 · 訪問量 2604
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章