1. 程式人生 > >Android中資源限定符hdpi large等的優先順序和匹配關係

Android中資源限定符hdpi large等的優先順序和匹配關係

請參考

http://developer.android.com/intl/zh-cn/guide/topics/resources/providing-resources.html#BestMatch

表 2. 配置限定符名稱。

配置 限定符值 描述
MCC 和 MNC 示例:
mcc310
mcc310-mnc004
mcc208-mnc00
等等

移動國家程式碼 (MCC),(可選)後跟裝置 SIM 卡中的行動網路程式碼 (MNC)。例如,mcc310 是指美國的任一運營商,mcc310-mnc004 是指美國的 Verizon 公司,mcc208-mnc00 是指法國的 Orange 公司。

如果裝置使用無線電連線(GSM 手機),則 MCC 和 MNC 值來自 SIM 卡。

也可以單獨使用 MCC(例如,將國家/地區特定的合法資源包括在應用中)。如果只需根據語言指定,則改用“語言和區域”限定符(稍後進行介紹)。 如果決定使用 MCC 和 MNC 限定符,請謹慎執行此操作並測試限定符是否按預期工作。

另請參閱配置欄位 mcc 和 mnc,這兩個欄位分別表示當前的移動國家程式碼和行動網路程式碼。

語言和區域 示例:
en
fr
en-rUS
fr-rFR
fr-rCA
等等

語言通過由兩個字母組成的 ISO 639-1 語言程式碼定義,(可選)後跟兩個字母組成的 ISO 3166-1-alpha-2 區域碼(前帶小寫字母“r”)。

這些程式碼不區分大小寫;r 字首用於區分割槽域碼。 不能單獨指定區域。

如果使用者更改系統設定中的語言,它有可能在應用生命週期中發生改變。 如需瞭解這會在執行期間給應用帶來哪些影響,請參閱處理執行時變更

有關針對其他語言本地化應用的完整指南,請參閱本地化

另請參閱  配置欄位,該欄位表示當前的區域設定。

佈局方向 ldrtl
ldltr

應用的佈局方向。ldrtl 是指“佈局方向從右到左”。ldltr 是指“佈局方向從左到右”,這是預設的隱式值。

它適用於佈局、圖片或值等任何資源。

例如,若要針對阿拉伯語提供某種特定佈局,並針對任何其他“從右到左”語言(如波斯語或希伯來語)提供某種通用佈局,則可編碼如下:

res/
    layout/   
        main.xml  
(Default layout) layout-ar/ main.xml (Specific layout for Arabic) layout-ldrtl/ main.xml (Any "right-to-left" language, except for Arabic, because the "ar" language qualifier has a higher precedence.)

注:要為應用啟用從右到左的佈局功能,必須將 supportsRtl 設定為"true",並將 targetSdkVersion 設定為 17 或更高。

此項為API 級別 17 中新增配置。

smallestWidth sw<N>dp

示例:
sw320dp
sw600dp
sw720dp
等等

螢幕的基本尺寸,由可用螢幕區域的最小尺寸指定。 具體來說,裝置的 smallestWidth 是螢幕可用高度和寬度的最小尺寸(您也可以將其視為螢幕的“最小可能寬度”)。無論螢幕的當前方向如何,您均可使用此限定符確保應用 UI 的可用寬度至少為 <N>dp。

例如,如果佈局要求螢幕區域的最小尺寸始終至少為 600dp,則可使用此限定符建立佈局資源 res/layout-sw600dp/。僅當可用螢幕的最小尺寸至少為 600dp 時,系統才會使用這些資源,而不考慮 600dp 所代表的邊是使用者所認為的高度還是寬度。smallestWidth 是裝置的固定螢幕尺寸特性;裝置的 smallestWidth 不會隨螢幕方向的變化而改變

裝置的 smallestWidth 將螢幕裝飾元素和系統 UI 考慮在內。例如,如果裝置的螢幕上有一些永久性 UI 元素佔據沿 smallestWidth 軸的空間,則系統會宣告 smallestWidth 小於實際螢幕尺寸,因為這些螢幕畫素不適用於您的 UI。因此,使用的值應該是佈局所需要的實際最小尺寸(通常,無論螢幕的當前方向如何,此值都是佈局支援的“最小寬度”)。

以下是一些可用於普通螢幕尺寸的值:

  • 320,適用於螢幕配置如下的裝置:
    • 240x320 ldpi(QVGA 手機)
    • 320x480 mdpi(手機)
    • 480x800 hdpi(高密度手機)
  • 480,適用於 480x800 mdpi 之類的螢幕(平板電腦/手機)。
  • 600,適用於 600x1024 mdpi 之類的螢幕(7 英寸平板電腦)。
  • 720,適用於 720x1280 mdpi 之類的螢幕(10 英寸平板電腦)。

應用為多個資源目錄提供不同的 smallestWidth 限定符值時,系統會使用最接近(但未超出)裝置 smallestWidth 的值。

此項為 API 級別 13 中新增配置。

如需瞭解有關設計不同螢幕和使用此限定符的詳細資訊,請參閱支援多個螢幕開發者指南。

可用寬度 w<N>dp

示例:
w720dp
w1024dp
等等

指定資源應該使用的最小可用螢幕寬度,以 dp 為單位,由 <N> 值定義。在橫向和縱向之間切換時,為了匹配當前實際寬度,此配置值也會隨之發生變化。

應用為多個資源目錄提供不同的此配置值時,系統會使用最接近(但未超出)裝置當前螢幕寬度的值。 此處的值考慮到了螢幕裝飾元素,因此如果裝置顯示屏的左邊緣或右邊緣上有一些永久性 UI 元素,考慮到這些 UI 元素,它會使用小於實際螢幕尺寸的寬度值,這樣會減少應用的可用空間。

此項為 API 級別 13 中新增配置。

另請參閱  配置欄位,該欄位存放當前螢幕寬度。

如需瞭解有關設計不同螢幕和使用此限定符的詳細資訊,請參閱支援多個螢幕開發者指南。

可用高度 h<N>dp

示例:
h720dp
h1024dp
等等

指定資源應該使用的最小可用螢幕高度,以“dp”為單位,由 <N> 值定義。 在橫向和縱向之間切換時,為了匹配當前實際高度,此配置值也會隨之發生變化。

應用為多個資源目錄提供不同的此配置值時,系統會使用最接近(但未超出)裝置當前螢幕高度的值。 此處的值考慮到了螢幕裝飾元素,因此如果裝置顯示屏的上邊緣或下邊緣有一些永久性 UI 元素,考慮到這些 UI 元素,同時為減少應用的可用空間,它會使用小於實際螢幕尺寸的高度值。 非固定的螢幕裝飾元素(例如,全屏時可隱藏的手機狀態列)並不在考慮範圍內,標題欄或操作欄等視窗裝飾也不在考慮範圍內,因此應用必須準備好處理稍小於其所指定值的空間。

此項為 API 級別 13 中新增配置。

另請參閱  配置欄位,該欄位存放當前螢幕寬度。

如需瞭解有關設計不同螢幕和使用此限定符的詳細資訊,請參閱支援多個螢幕開發者指南。

螢幕尺寸 small
normal
large
xlarge
  • small:尺寸類似於低密度 QVGA 螢幕的螢幕。小螢幕的最小布局尺寸約為 320x426 dp 單位。例如,QVGA 低密度螢幕和 VGA 高密度螢幕。
  • normal:尺寸類似於中等密度 HVGA 螢幕的螢幕。標準螢幕的最小布局尺寸約為 320x470 dp 單位。例如,WQVGA 低密度螢幕、HVGA 中等密度螢幕、WVGA 高密度螢幕。
  • large:尺寸類似於中等密度 VGA 螢幕的螢幕。 大螢幕的最小布局尺寸約為 480x640 dp 單位。 例如,VGA 和 WVGA 中等密度螢幕。
  • xlarge:明顯大於傳統中等密度 HVGA 螢幕的螢幕。超大螢幕的最小布局尺寸約為 720x960 dp 單位。在大多數情況下,螢幕超大的裝置體積過大,不能放進口袋,最常見的是平板式裝置。 此項為 API 級別 9 中新增配置。

注:使用尺寸限定符並不表示資源僅適用於該尺寸的螢幕。 如果沒有為備用資源提供最符合當前裝置配置的限定符,則系統可能使用其中最匹配的資源。

注意:如果所有資源均使用大於當前螢幕的尺寸限定符,則系統會使用這些資源,並且應用在執行時將會崩潰(例如,如果所有佈局資源均用 xlarge 限定符標記,但裝置是標準尺寸的螢幕)。

此項為 API 級別 4 中新增配置。

如需瞭解詳細資訊,請參閱支援多個螢幕

另請參閱  配置欄位,該欄位表示螢幕是小尺寸、標準尺寸還是大尺寸。

螢幕縱橫比 long
notlong
  • long:寬屏,如 WQVGA、WVGA、FWVGA
  • notlong:非寬屏,如 QVGA、HVGA 和 VGA

此項為 API 級別 4 中新增配置。

它完全基於螢幕的縱橫比(寬屏較寬),而與螢幕方向無關。

另請參閱  配置欄位,該欄位指示螢幕是否為寬屏。

螢幕方向 port
land
  • port:裝置處於縱向(垂直)
  • land:裝置處於橫向(水平)

如果使用者旋轉螢幕,它有可能在應用生命週期中發生改變。 如需瞭解這會在執行期間給應用帶來哪些影響,請參閱處理執行時變更

另請參閱  配置欄位,該欄位指示當前的裝置方向。

UI 模式 car
desk
television
appliancewatch
  • car:裝置正在車載手機座上顯示
  • desk:裝置正在桌面手機座上顯示
  • television:裝置正在電視上顯示,為使用者提供“十英尺”體驗,其 UI 位於遠離使用者的大螢幕上,主要面向方向鍵或其他非指標式互動
  • appliance:裝置用作不帶顯示屏的裝置
  • watch:裝置配有顯示屏,戴在手腕上

此項為 API 級別 8 中新增配置,API 13 中新增電視配置,API 20 中新增手錶配置。

如需瞭解應用在裝置插入手機座或從中移除時的響應方式,請閱讀確定並監控插接狀態和型別

如果使用者將裝置放入手機座中,它有可能在應用生命週期中發生改變。 可以使用  啟用或禁用其中某些模式。如需瞭解這會在執行期間給應用帶來哪些影響,請參閱處理執行時變更

夜間模式 night
notnight
  • night:夜間
  • notnight:白天

此項為 API 級別 8 中新增配置。

如果夜間模式停留在自動模式(預設),它有可能在應用生命週期中發生改變。在這種情況下,該模式會根據當天的時間進行調整。 可以使用 啟用或禁用此模式。如需瞭解這會在執行期間給應用帶來哪些影響,請參閱處理執行時變更

螢幕畫素密度 (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
  • ldpi:低密度螢幕;約為 120dpi。
  • mdpi:中等密度(傳統 HVGA)螢幕;約為 160dpi。
  • hdpi:高密度螢幕;約為 240dpi。
  • xhdpi:超高密度螢幕;約為 320dpi。API 級別 8 中新增配置
  • xxhdpi:超超高密度螢幕;約為 480dpi。API 級別 16 中新增配置
  • xxxhdpi:超超超高密度螢幕使用(僅限啟動器圖示,請參閱“支援多個螢幕”中的註釋);約為 640dpi。 API 級別 18 中新增配置
  • nodpi:它可用於您不希望縮放以匹配裝置密度的點陣圖資源。
  • tvdpi:密度介於 mdpi 和 hdpi 之間的螢幕;約為 213dpi。它並不是“主要”密度組, 主要用於電視,而大多數應用都不需要它。對於大多數應用而言,提供 mdpi 和 hdpi 資源便已足夠,系統將根據需要對其進行縮放。API 級別 13 中引入了此限定符。

六個主要密度之間的縮放比為 3:4:6:8:12:16(忽略 tvdpi 密度)。因此,9x9 (ldpi) 點陣圖相當於 12x12 (mdpi)、18x18 (hdpi)、24x24 (xhdpi) 點陣圖,依此類推。

如果您認為影象資源在電視或其他某些裝置上呈現的效果不夠好,而想嘗試使用 tvdpi 資源,則縮放比例為 1.33*mdpi。例如,mdpi 螢幕的 100px x 100px 影象應該相當於 tvdpi 的133px x 133px。

注:使用密度限定符並不表示資源僅適用於該密度的螢幕。 如果沒有為備用資源提供最符合當前裝置配置的限定符,則系統可能使用其中最匹配的資源。

如需瞭解有關如何處理不同螢幕密度以及 Android 如何縮放點陣圖以適應當前密度的詳細資訊,請參閱支援多個螢幕

觸控式螢幕型別 notouch
finger
  • notouch:裝置沒有觸控式螢幕。
  • finger:裝置有一個專供使用者通過手指直接與其互動的觸控式螢幕。

另請參閱  配置欄位,該欄位指示裝置上的觸控式螢幕型別。

鍵盤可用性 keysexposed
keyshidden
keyssoft
  • keysexposed:裝置具有可用的鍵盤。如果裝置啟用了軟鍵盤(不無可能),那麼即使硬鍵盤沒有展示給使用者,哪怕裝置沒有硬鍵盤,也可以使用此限定符。 如果沒有提供或已經禁用軟鍵盤,則只有在顯示硬鍵盤時才會使用此限定符。
  • keyshidden:裝置具有可用的硬鍵盤,但它處於隱藏狀態,且裝置沒有啟用軟鍵盤。
  • keyssoft:裝置已經啟用軟鍵盤(無論是否可見)。

如果提供了 keysexposed 資源,但未提供 keyssoft 資源,那麼只要系統已經啟用軟鍵盤,就會使用 keysexposed 資源,而不考慮鍵盤是否可見。

如果使用者開啟硬鍵盤,它有可能在應用生命週期中發生改變。 如需瞭解這會在執行期間給應用帶來哪些影響,請參閱處理執行時變更

主要文字輸入法 nokeys
qwerty
12key
  • nokeys:裝置沒有用於文字輸入的硬按鍵。
  • qwerty:裝置具有標準硬鍵盤(無論是否對使用者可見)。
  • 12key:裝置具有 12 鍵硬鍵盤(無論是否對使用者可見)。

另請參閱  配置欄位,該欄位指示可用的主要文字輸入法。

平臺版本(API 級別) 示例:
v3
v4
v7
等等

裝置支援的 API 級別。例如,v1 對應於 API 級別 1(帶有 Android 1.0 或更高版本系統的裝置),v4 對應於 API 級別 4(帶有 Android 1.6 或更高版本系統的裝置)。如需瞭解有關這些值的詳細資訊,請參閱 Android API 級別文件。


Android 如何找到最匹配資源


drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

同時,假設裝置配置如下:

區域設定 = en-GB 
螢幕方向 = port 
螢幕畫素密度 = hdpi 
觸控式螢幕型別 = notouch 
主要文字輸入法 = 12key

通過將裝置配置與可用的備用資源進行比較,Android 從 drawable-en-port 中選擇 Drawable。

系統使用以下邏輯決定要使用的資源:

圖 2. Android 如何找到最匹配資源的流程圖。

  1. 淘汰與裝置配置衝突的資原始檔。

    drawable-fr-rCA/ 目錄與 en-GB 區域設定衝突,因而被淘汰。

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    例外:螢幕畫素密度是唯一一個未因衝突而被淘汰的限定符。 儘管裝置的螢幕密度為 hdpi,但是 drawable-port-ldpi/ 未被淘汰,因為此時每個螢幕密度均視為匹配。如需瞭解詳細資訊,請參閱支援多個螢幕文件。

  2. 選擇列表(表 2)中(下一個)優先順序最高的限定符。(先從 MCC 開始,然後下移。)
  3. 是否有資源目錄包括此限定符?
    • 若無,請返回到第 2 步,看看下一個限定符。(在該示例中,除非達到語言限定符,否則答案始終為“否”。)
    • 若有,請繼續執行第 4 步。
  4. 淘汰不含此限定符的資源目錄。在該示例中,系統會淘汰所有不含語言限定符的目錄。
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    例外:如果涉及的限定符是螢幕畫素密度,則 Android 會選擇最接近裝置螢幕密度的選項。通常,Android 傾向於縮小大型原始影象,而不是放大小型原始影象。請參閱支援多個螢幕

  5. 返回並重復第 2 步、第 3 步和第 4 步,直到只剩下一個目錄為止。在此示例中,螢幕方向是下一個判斷是否匹配的限定符。因此,未指定螢幕方向的資源被淘汰:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    

    剩下的目錄是 drawable-en-port