Andoird屏幕適配

1、基本概念

1、屏幕尺寸:按屏幕對角測量的實際物理尺寸。Android將所有實際屏幕尺寸分組爲四種通用尺寸:小、正常、大和超大。從Android 3.2(API 級別 13)開始,這些尺寸組已棄用,而採用根據可用屏幕寬度管理屏幕尺寸的新技術。

2、屏幕密度:屏幕物理區域中的像素量;通常稱爲 dpi(每英寸點數)。Android 將所有屏幕密度分組爲六種通用密度:低、中、高、超高、超超高和超超超高。

ldpi(低)~120dpi

mdpi(中)~160dpi

hdpi(高)~240dpi

xhdpi(超高)~320dpi

xxhdpi(超超高)~480dpi

xxxhdpi(超超超高)~640dpi

3、每種通用的尺寸和密度都涵蓋一個實際屏幕尺寸和密度範圍。


4、分辨率:屏幕上物理像素的總數。添加對多種屏幕的支持時, 應用不會直接使用分辨率;而只應關注通用尺寸和密度組指定的屏幕尺寸及密度。

5、密度無關像素 (dp):是虛擬像素單位,在定義應用的UI時應始終使用dp單位,以確保在不同密度的屏幕上正常顯示UI。密度無關像素等於160dpi屏幕上的一個物理像素。dp單位轉換爲屏幕像素px的公式: px = dp * (dpi / 160)。例如,在 240 dpi屏幕上,1 dp 等於1.5物理像素。

6、爲什麼使用dp來代替px佈局?

使用像素來定義佈局尺寸會帶來問題,因爲不同的屏幕具有不同的像素密度,因此同樣數量的像素在不同設備上可能對應於不同的物理尺寸。因此,在指定尺寸時,請務必使用 dp 或 sp 單位。dp 是一種密度無關像素,對應於 160 dpi 下像素的物理尺寸。 sp 是相同的基本單位,但它會按用戶首選的文本尺寸進行縮放(屬於縮放無關像素),因此您在定義文本尺寸時應使用此計量單位(但切勿爲佈局尺寸使用該單位)。

2、密度獨立性

密度獨立性:應用界面元素的物理尺寸不會因爲不同設備的像素密度而顯著變化。

Android 系統可幫助您的應用以兩種方式實現密度獨立性:

1、系統根據當前屏幕密度擴展 dp 單位數:由於密度獨立像素的基線是中密度屏幕,因此對於中密度屏幕的設備不會改變dp,而對於低密度和高密度屏幕,系統將分別增加和減少密度獨立像素值,以適應屏幕。

2、系統在必要時可根據當前屏幕密度將可繪製對象資源擴展到適當的大小,但位圖縮放可能導致模糊或像素化位圖,因此應爲不同的密度提供替代的位圖資源。例如,應爲高密度屏幕提供分辨率較高的位圖。

3、屏幕適配

1、在 XML 佈局文件中指定尺寸時使用wrap_content、match_parent 或 dp 單位。

2、不要在應用代碼中使用硬編碼的像素值

Android系統使用像素作爲表示尺寸或座標值的標準單位。例如 myView.getWidth() 將返回視圖在當前屏幕的像素寬,但在更高密度的屏幕上,返回的值可能不同。

程序中可以用getResources().getDisplayMetrics().density來獲得屏幕密度,從而完成dp和px的相互轉換。

3、不要使用 AbsoluteLayout(已棄用)

AbsoluteLayout 會強制在固定位置放置其子視圖,很容易導致在不同顯示屏上顯示效果不好的用戶界面。因此,AbsoluteLayout在Android 1.5(API 級別 3)上便已棄用。

4、使用尺寸和密度特定資源,爲不同屏幕密度提供替代位圖可繪製對象

4、配置限定符

要使用配置限定符:

1、在項目的 res/ 目錄中新建一個目錄,並使用以下 格式命名:<resources_name>-<qualifier>

其中,<resources_name> 是標準資源名稱(例如drawable 或 layout);<qualifier> 是配置限定符,用於指定要使用這些資源的屏幕配置(例如 hdpi 或 xlarge)。

您可以一次使用多個 <qualifier> —只需使用短劃線分隔每個限定符。

2、將適當的配置特定資源保存在此新目錄下。這些資源 文件的名稱必須與默認資源文件完全一樣。

5、爲不同屏幕尺寸提供不同的佈局

可用於提供尺寸特定資源的配置限定符包括 small、normal、large 和 xlarge。在 Android 3.2 中引入了屏幕尺寸的新配置限定符:smallestWidth sw<N>dp、可用屏幕寬度w<N>dp、可用屏幕高度h<N>dp。例如:

res/layout/my_layout.xml              // layout for normal screen size("default")

res/layout-large/my_layout.xml        // layout for large screen size

res/layout-xlarge/my_layout.xml       // layout for extra-large screen size

res/layout-xlarge-land/my_layout.xml  // layout for extra-large in landscapeorientation

6、爲不同屏幕密度提供不同的位圖可繪製對象

可用於密度特定資源的配置限定符(在下面詳述)包括 ldpi(低)、mdpi(中)、 hdpi(高)、xhdpi(超高)、xxhdpi (超超高)和 xxxhdpi(超超超高)。例如:

res/drawable-mdpi/graphic.png         // bitmap for medium-density

res/drawable-hdpi/graphic.png         // bitmap for high-density

res/drawable-xhdpi/graphic.png        // bitmap for extra-high-density

res/drawable-xxhdpi/graphic.png       // bitmap for extra-extra-high-density

要爲不同的密度創建替代位圖可繪製對象,應遵循六種通用密度之間的 3:4:6:8:12:16 縮放比率。

7、其他

1、要聲明應用支持的屏幕尺寸,應在清單文件中包含 <supports-screens> 元素。

2、縮放運行時創建的位圖對象

要控制是否縮放運行時創建的 Bitmap,可以使用setDensity()指定位圖的密度,從DisplayMetrics傳遞密度常量,例如DENSITY_HIGH或DENSITY_LOW。如果使用BitmapFactory創建Bitmap,例如從文件或流創建,可以使用 BitmapFactory.Options 定義位圖的屬性(因爲它已經存在),確定系統是否要縮放或者如何縮放。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章