Android 應用資源

來源:互聯網
上載者:User

標籤:包括   裝置   sof   好處   手機   track   階層   基於   除了   

 

主要說明了Android工程的資源配置情況

比較重要的點有:

1.Android資源檔類型和存放目錄的對應關係

2.Android會檢測當前裝置配置並為應用載入合適的資源,所以在開發過程中配置資源時,可以根據資來源目錄名來區分不同配置裝置所需要的資源,目錄名的規則就是配置限定符

3.可以使用資源別名,來實現預設配置的資源共用到其他配置限定符的資來源目錄下使用

 

資源別名的一些使用要求:

1.可繪製對象
要建立指向現有可繪製對象的別名,請使用 <bitmap> 元素。例如:

<?xml version="1.0" encoding="utf-8"?><bitmap xmlns:android="http://schemas.android.com/apk/res/android"    android:src="@drawable/icon_ca" />

 

2布局
要建立指向現有布局的別名,請使用封裝在 <merge> 中的 <include> 元素。例如:

<?xml version="1.0" encoding="utf-8"?><merge>    <include layout="@layout/main_ltr"/></merge>

除了上面兩個比較特殊的資源類型, 其他的都可以直接使用@類型/id_name的形式來指向目標資源。

 

在多套配置資源的情況下, Android如何尋找最適合的資源:

步驟:

1.排除和裝置資訊衝突的帶限定符的資來源目錄

2.擷取裝置資訊中和配置限定符有關的資訊(根據後面的配置限定符表的優先順序逐個擷取判斷)

3.判斷應用的資源配置中是否包含步驟2擷取的資源限定符, 沒有則重複步驟2擷取下一個優先順序的資源配置限定符, 有的話就執行步驟4

4.排除沒有匹配到的資源配置, 也就是保留了匹配到資源限定符的相關資源檔夾

5.重複步驟2、3、4直到剩下一套資源

簡單來說, 就是通過配置限定符表的優先順序,逐個匹配來不斷排除不符合裝置資訊的相關資源檔夾, 到最後就只有兩種情況, 1.只有預設的資源配置限定符目錄,或者沒有一個資來源目錄有匹配到資源限定符表的, 2.根據限定符表篩選出最多符合的資來源目錄

 

下表是資源的預設資料夾名稱:

目錄 資源類型
animator/ 用於定義屬性動畫的 XML 檔案。
anim/ 定義漸層動畫的 XML 檔案。(屬性動畫也可以儲存在此目錄中,但是為了區分這兩種類型,屬性動畫首選 animator/ 目錄。)
color/ 用於定義顏色狀態列表的 XML 檔案。請參閱顏色狀態列表資源
drawable/

位元影像檔案(.png.9.png.jpg.gif)或編譯為以下可繪製對象資源子類型的 XML 檔案:

  • 位元影像檔案
  • 九宮格(可調整大小的位元影像)
  • 狀態列表
  • 形狀
  • 動畫可繪製對象
  • 其他可繪製對象

請參閱 可繪製對象資源。

mipmap/ 適用於不同啟動器表徵圖密度的可繪製對象檔案。如需瞭解有關使用 mipmap/ 檔案夾管理啟動器表徵圖的詳細資料,請參閱管理項目概覽。
layout/ 用於定義使用者介面布局的 XML 檔案。 請參閱布局資源。
menu/ 用於定義應用菜單(如選項菜單、操作功能表或子功能表)的 XML 檔案。請參閱菜單資源。
raw/

要以原始形式儲存的任意檔案。要使用原始 InputStream 開啟這些資源,請使用資源 ID(即 R.raw.filename)調用 Resources.openRawResource()

但是,如需訪問原始檔案名和檔案階層,則可以考慮將某些資源儲存在 assets/ 目錄下(而不是 res/raw/)。assets/ 中的檔案沒有資源 ID,因此您只能使用 AssetManager 讀取這些檔案。

values/

包含字串、整型數和顏色等簡單值的 XML 檔案。

其他 res/ 子目錄中的 XML 資源檔是根據 XML 檔案名稱定義單個資源,而 values/ 目錄中的檔案可描述多個資源。對於此目錄中的檔案,<resources> 元素的每個子項目均定義一個資源。例如,<string> 元素建立 R.string 資源,<color> 元素建立 R.color 資源。

由於每個資源均用其自己的 XML 元素定義,因此您可以根據自己的需要命名檔案,並將不同的資源類型放在一個檔案中。但是,為了清晰起見,您可能需要將獨特的資源類型放在不同的檔案中。 例如,對於可在此目錄中建立的資源,下面給出了相應的檔案名稱約定:

  • arrays.xml,用於資源數組(類型化數組)。
  • colors.xml:顏色值。
  • dimens.xml:尺寸值。
  • strings.xml:字串值。
  • styles.xml:樣式。

請參閱字串資源、樣式資源和更多資源類型。

xml/ 可以在運行時通過調用 Resources.getXML() 讀取的任意 XML 檔案。各種 XML 設定檔(如可搜尋配置)都必須儲存在此處。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

下表是配置限定符的列表:

配置 限定符值 說明
MCC 和 MNC 樣本:
mcc310
mcc310-mnc004
mcc208-mnc00
等等

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

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

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

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

語言和地區 樣本:
en
fr
en-rUS
fr-rFR
fr-rCA
等等

語言通過由兩個字母組成的 ISO639-1 語言代碼定義,可以選擇後跟兩個字母組成的ISO3166-1-alpha-2 地區碼(前帶小寫字母“r”)。

這些代碼不區分大小寫;r首碼用於區分地區碼。 不能單獨指定地區。

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

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

另請參閱 locale 配置欄位,該欄位表示當前的語言地區。

布局方向 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 中新增配置。

另請參閱 android:requiresSmallestWidthDp 屬性和 smallestScreenWidthDp 配置欄位,前者聲明與應用相容的最小 smallestWidth;後者存放裝置的 smallestWidth 值。

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

可用寬度 w<N>dp

樣本:
w720dp
w1024dp
等等

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

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

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

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

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

可用高度 h<N>dp

樣本:
h720dp
h1024dp
等等

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

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

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

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

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

螢幕尺寸 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 中新增配置。

如需瞭解詳細資料,請參閱支援多種螢幕。

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

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

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

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

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

圓形螢幕 round
notround
  • round:圓形螢幕,例如圓形可穿戴式裝置
  • notround:方形螢幕,例如手機或平板電腦

此項為 API 層級 23 中新增配置。

另請參閱 isScreenRound() 配置方法,其指示螢幕是否為寬屏。

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

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

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

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

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

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

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

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

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

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

螢幕像素密度 (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
  • 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 中新增配置
  • anydpi:此限定符適合所有螢幕密度,其優先順序高於其他限定符。這對於向量可繪製對象很有用。此項為 API 層級 21 中新增配置

六個主要密度之間的縮放比為 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:裝置有一個專供使用者通過手指直接與其互動的觸控螢幕。

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

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

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

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

另請參閱配置欄位 hardKeyboardHiddenkeyboardHidden,這兩個欄位分別指示硬鍵盤的可見度和任何一種鍵盤(包括軟鍵盤)的可見度。

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

另請參閱 keyboard 配置欄位,該欄位指示可用的主要文本IME。

導航鍵可用性 navexposed
navhidden
  • navexposed:導航鍵可供使用者使用。
  • navhidden:導航鍵不可用(例如,位於密封蓋子後面)。

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

另請參閱navigationHidden 配置欄位,該欄位指示導航鍵是否處於隱藏狀態。

主要非觸摸導航方法 nonav
dpad
trackball
wheel
  • nonav:除了使用觸控螢幕以外,裝置沒有其他導航設施。
  • dpad:裝置具有用於導航的方向鍵。
  • trackball:裝置具有用於導航的軌跡球。
  • wheel:裝置具有用於導航的方向盤(不常見)。

另請參閱 navigation配置欄位,該欄位指示可用的導航方法類型。

平台版本(API 層級) 樣本:
v3
v4
v7
等等

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

Android 應用資源

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.