480×320的螢幕:就是每一條水平線上包含有480個像素點,共有320條線,即掃描列數為480列,行數為320行。解析度不僅與顯示尺寸有關,還受顯像管點距、視頻頻寬等因素的影響。
(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)
ldpi:240x320
mdpi:320x480
hdpi:480x800、480x854
xhdpi:至少960*720
xxhdpi:1280×720
android 自適應 多螢幕支援
1、螢幕相關概念
1.1解析度
是指螢幕上有橫豎各有多少個像素
1.2螢幕尺寸
指的是手機實際的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸
android將螢幕大小分為四個層級(small,normal,large,and extra large)。
1.3螢幕密度
每英吋像素數
手機可以有相同的解析度,但螢幕尺寸可以不相同,
Diagonal pixel表示對角線的像素值(=),DPI=933/3.7=252
android將實際的螢幕密度分為四個通用尺寸(low,medium,high,and extra high)
一般情況下的普通螢幕:ldpi是120dpi,mdpi是160dpi,hdpi是240dpi,xhdpi是320dpi
對於螢幕來說,dpi越大,螢幕的精細度越高,螢幕看起來就越清楚
1.4密度無關的像素(Density-independent pixel——dip)
dip是一種虛擬像素單位
dip和具體像素值的對應公式是dip/pixel=dpi值/160,也就是px = dp * (dpi / 160)
當你定義應用的布局的UI時應該使用dp單位,確保UI在不同的螢幕上正確顯示。
2、android多螢幕支援機制
Android的支援多螢幕機制即用為當前裝置螢幕提供一種合適的方式來共同管理並解析應用資源。
Android平台中支援一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合適資源。
指定大小(size-specific)的合適資源是指small, normal, large, and xlarge。
指定密度(density-specific)的合適資源,是指ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high).
Android有個自動匹配機制去選擇對應的布局和圖片資源
1)介面布局方面
根據物理尺寸的大小準備5套布局:
layout(放一些通用布局xml檔案,比如介面頂部和底部的布局,不會隨著螢幕大小變化,類似windos視窗的title bar),
layout-small(螢幕尺寸小於3英寸左右的布局),
layout-normal(螢幕尺寸小於4.5英寸左右),
layout-large(4英寸-7英寸之間),
layout-xlarge(7-10英寸之間)
2)圖片資源方面
需要根據dpi值準備5套圖片資源:
drawable:主要放置xml設定檔或者對解析度要求較低的圖片
drawalbe-ldpi:低解析度的圖片,如QVGA (240x320)
drawable-mdpi:中等解析度的圖片,如HVGA (320x480)
drawable-hdpi:高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
drawable-xhdpi:至少960dp x 720dp
Android有個自動匹配機制去選擇對應的布局和圖片資源。
系統會根據機器的解析度來分別到這幾個檔案夾裡面去找對應的圖片。
在開發程式時為了相容不同平台不同螢幕,建議各自檔案夾根據需求均存放不同版本圖片。
3、AndroidManifest.xml 配置
android從1.6和更高,Google為了方便開發人員對於各種解析度機型的移植而增加了自動適配的功能
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
3.1是否支援多種不同密度的螢幕
android:anyDensity=["true" | "false"]
如果android:anyDensity="true"
指應用程式支援不同密度,會根據螢幕的解析度自動去匹配。
如果android:anyDensity="false"
應用程式支援不同密度,系統自動縮放圖片尺寸和這個圖片的座標。具體解釋一下系統是如何自動縮放資源的。
例如我們在hdpi,mdpi,ldpi檔案夾下擁有同一種資源,那麼應用也不會自動地去相應檔案夾下尋找資源,這種情況都是出現在高密度,以及低密度的手機上,比如說一部240×320像素的手機,
如果設定android:anyDensity="false",Android系統會將240 x 320(低密度)轉換為 320×480(中密度),這樣的話,應用就會在小密度手機上載入mdpi檔案中的資源。
3.2是否支援大螢幕
android:largeScreens=["true" | "false"]
如果在聲明不支援的大螢幕,而這個螢幕尺寸是larger的話,系統使用尺寸為("normal")和密度為("medium)顯示,
不過會出現一層黑色的背景。
3.3是否支援小螢幕
android:smallScreens=["true" | "false"]
如果在聲明不支援的小螢幕,而當前螢幕尺寸是smaller的話,系統也使用尺寸為("normal")和密度為("medium)顯示
如果應用程式能在小螢幕上正確縮放(最低是small尺寸或最小寬度320dp),那就不需要用到本屬性。否則,就應該為最小螢幕寬度標識符設定本屬性
來匹配應用程式所需的最小尺寸。
4、Android提供3種方式處理螢幕自適應
4.1預縮放的資源(基於尺寸和密度去尋找圖片)
1)如果找到相應的尺寸和密度,則利用這些圖片進行無縮放顯示。
2)如果沒法找到相應的尺寸,而找到密度,則認為該圖片尺寸為 "medium",利用縮放顯示這個圖片。
3)如