Android復(fù)習(xí)(二)應(yīng)用資源-創(chuàng)新互聯(lián)

1. res下的資源類(lèi)型

創(chuàng)新互聯(lián)公司成立以來(lái)不斷整合自身及行業(yè)資源、不斷突破觀念以使企業(yè)策略得到完善和成熟,建立了一套“以技術(shù)為基點(diǎn),以客戶需求中心、市場(chǎng)為導(dǎo)向”的快速反應(yīng)體系。對(duì)公司的主營(yíng)項(xiàng)目,如中高端企業(yè)網(wǎng)站企劃 / 設(shè)計(jì)、行業(yè) / 企業(yè)門(mén)戶設(shè)計(jì)推廣、行業(yè)門(mén)戶平臺(tái)運(yùn)營(yíng)、手機(jī)APP定制開(kāi)發(fā)、手機(jī)網(wǎng)站制作、微信網(wǎng)站制作、軟件開(kāi)發(fā)、德陽(yáng)機(jī)房服務(wù)器托管等實(shí)行標(biāo)準(zhǔn)化操作,讓客戶可以直觀的預(yù)知到從創(chuàng)新互聯(lián)公司可以獲得的服務(wù)效果。
目錄資源類(lèi)型
animator/用于定義屬性動(dòng)畫(huà)的 XML 文件。
anim/用于定義漸變動(dòng)畫(huà)的 XML 文件。(屬性動(dòng)畫(huà)也可保存在此目錄中,但為了區(qū)分這兩種類(lèi)型,屬性動(dòng)畫(huà)選 animator/ 目錄。)
color/用于定義顏色狀態(tài)列表的 XML 文件。請(qǐng)參閱顏色狀態(tài)列表資源
drawable/

位圖文件(.png.9.png、.jpg.gif)或編譯為以下可繪制對(duì)象資源子類(lèi)型的 XML 文件:

  • 位圖文件
  • 九宮格(可調(diào)整大小的位圖)
  • 狀態(tài)列表
  • 形狀
  • 動(dòng)畫(huà)可繪制對(duì)象
  • 其他可繪制對(duì)象

請(qǐng)參閱 Drawable 資源。

mipmap/適用于不同啟動(dòng)器圖標(biāo)密度的可繪制對(duì)象文件。如需了解有關(guān)使用 mipmap/ 文件夾管理啟動(dòng)器圖標(biāo)的詳細(xì)信息,請(qǐng)參閱管理項(xiàng)目概覽。
layout/用于定義用戶界面布局的 XML 文件。請(qǐng)參閱布局資源。
menu/用于定義應(yīng)用菜單(如選項(xiàng)菜單、上下文菜單或子菜單)的 XML 文件。請(qǐng)參閱菜單資源。
raw/

需以原始形式保存的任意文件。如要使用原始 InputStream 打開(kāi)這些資源,請(qǐng)使用資源 ID(即 R.raw.filename)調(diào)用 Resources.openRawResource()。

但是,如需訪問(wèn)原始文件名和文件層次結(jié)構(gòu),則可以考慮將某些資源保存在 assets/ 目錄(而非 res/raw/)下。assets/ 中的文件沒(méi)有資源 ID,因此您只能使用 AssetManager 讀取這些文件。

values/

包含字符串、整型數(shù)和顏色等簡(jiǎn)單值的 XML 文件。

其他 res/ 子目錄中的 XML 資源文件會(huì)根據(jù) XML 文件名定義單個(gè)資源,而 values/ 目錄中的文件可描述多個(gè)資源。對(duì)于此目錄中的文件,<resources> 元素的每個(gè)子元素均會(huì)定義一個(gè)資源。例如,<string> 元素會(huì)創(chuàng)建 R.string 資源,<color> 元素會(huì)創(chuàng)建 R.color 資源。

由于每個(gè)資源均使用自己的 XML 元素進(jìn)行定義,因此您可以隨意命名文件,并在某個(gè)文件中放入不同的資源類(lèi)型。但是,您可能需要將獨(dú)特的資源類(lèi)型放在不同的文件中,使其一目了然。例如,對(duì)于可在此目錄中創(chuàng)建的資源,下面給出了相應(yīng)的文件名約定:

  • arrays.xml:資源數(shù)組(類(lèi)型數(shù)組)。
  • colors.xml:顏色值。
  • dimens.xml:尺寸值。
  • strings.xml:字符串值。
  • styles.xml:樣式。

請(qǐng)參閱字符串資源、樣式資源和更多資源類(lèi)型。

xml/可在運(yùn)行時(shí)通過(guò)調(diào)用 Resources.getXML() 讀取的任意 XML 文件。各種 XML 配置文件(如可搜索配置)都必須保存在此處。
font/帶有擴(kuò)展名的字體文件(如 .ttf、.otf 或 .ttc),或包含 <font-family> 元素的 XML 文件。如需詳細(xì)了解作為資源的字體,請(qǐng)參閱 XML 中的字體。

注意:切勿將資源文件直接保存在 res/ 目錄內(nèi),因?yàn)檫@樣會(huì)造成編譯錯(cuò)誤。

2.限定符

 命名規(guī)則 - <resources_name>-<config_qualifier>

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

移動(dòng)設(shè)備國(guó)家代碼 (MCC),(可選)后跟設(shè)備 SIM 卡中的移動(dòng)設(shè)備網(wǎng)絡(luò)代碼 (MNC)。例如,mcc310 是指美國(guó)的任一運(yùn)營(yíng)商,mcc310-mnc004 是指美國(guó)的 Verizon 公司,mcc208-mnc00 是指法國(guó)的 Orange 公司。

如果設(shè)備使用無(wú)線裝置連接(GSM 手機(jī)),則 MCC 和 MNC 值均來(lái)自 SIM 卡。

您也可以單獨(dú)使用 MCC(例如,將國(guó)家/地區(qū)特定的合法資源加入應(yīng)用)。如果只需根據(jù)語(yǔ)言指定,則改用語(yǔ)言和地區(qū)限定符(稍后進(jìn)行介紹)。如果決定使用 MCC 和 MNC 限定符,請(qǐng)謹(jǐn)慎執(zhí)行此操作并測(cè)試限定符是否按預(yù)期工作。

另請(qǐng)參閱配置字段 mcc 和 mnc,二者分別表示當(dāng)前的移動(dòng)設(shè)備國(guó)家代碼和移動(dòng)設(shè)備網(wǎng)絡(luò)代碼。

語(yǔ)言和區(qū)域示例:
en
fr
en-rUS
fr-rFR
fr-rCA
b+en
b+en+US
b+es+419

語(yǔ)言通過(guò)由兩個(gè)字母組成的 ISO 639-1 語(yǔ)言代碼進(jìn)行定義,可以選擇后跟兩個(gè)字母組成的 ISO 3166-1-alpha-2 區(qū)域碼(前綴用小寫(xiě)字母 r)。

這些代碼區(qū)分大小寫(xiě);r 前綴用于區(qū)分區(qū)域碼。您不能單獨(dú)指定區(qū)域。

Android 7.0(API 級(jí)別 24)引入對(duì) BCP 47 語(yǔ)言標(biāo)記的支持,可供您用來(lái)限定特定語(yǔ)言和區(qū)域的資源。語(yǔ)言標(biāo)記由一個(gè)或多個(gè)子標(biāo)記序列組成,每個(gè)子標(biāo)記都能優(yōu)化或縮小由整體標(biāo)記標(biāo)識(shí)的語(yǔ)言范圍。如需了解有關(guān)語(yǔ)言標(biāo)記的詳細(xì)信息,請(qǐng)參閱用于標(biāo)識(shí)語(yǔ)言的標(biāo)記。

如要使用 BCP 47 語(yǔ)言標(biāo)記,請(qǐng)將 b+ 和兩個(gè)字母的 ISO 639-1 語(yǔ)言代碼連接;其后還可選擇使用其他子標(biāo)記,用 + 分隔即可。

如果用戶在系統(tǒng)設(shè)置中更改語(yǔ)言,則語(yǔ)言標(biāo)記可能會(huì)在應(yīng)用的生命周期中發(fā)生變更。如需了解運(yùn)行時(shí)應(yīng)用會(huì)因此受到何種影響,請(qǐng)參閱處理運(yùn)行時(shí)變更。

有關(guān)針對(duì)其他語(yǔ)言本地化應(yīng)用的完整指南,請(qǐng)參閱本地化。

另請(qǐng)參閱 getLocales() 方法,了解該方法提供的已定義語(yǔ)言區(qū)域列表。此列表包含主要的語(yǔ)言區(qū)域。

布局方向ldrtl
ldltr

應(yīng)用的布局方向。ldrtl 是指“布局方向從右到左”。ldltr 是指“布局方向從左到右”(默認(rèn)的隱式值)。

此配置適用于布局、可繪制資源或值等任何資源。

例如,若要針對(duì)阿拉伯語(yǔ)提供某種特定布局,并針對(duì)任何其他“從右到左”的語(yǔ)言(如波斯語(yǔ)或希伯來(lái)語(yǔ))提供某種通用布局,則可提供以下資源:

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.) 

請(qǐng)注意:如要為應(yīng)用啟用從右到左的布局功能,則必須將 supportsRtl 設(shè)置為 "true",并將 targetSdkVersion 設(shè)置為 17 或更高版本。

此項(xiàng)為 API 級(jí)別 17 中的新增配置。

smallestWidthsw<N>dp

示例:
sw320dp
sw600dp
sw720dp
等等

屏幕的基本尺寸,由可用屏幕區(qū)域的最小尺寸指定。具體而言,設(shè)備的 smallestWidth 是屏幕可用高度和寬度的最小尺寸(您也可將其視為屏幕的“最小可能寬度”)。無(wú)論屏幕的當(dāng)前方向如何,您均可使用此限定符確保應(yīng)用界面的可用寬度至少為 <N> dp。

例如,如果布局要求屏幕區(qū)域的最小尺寸始終至少為 600dp,則可使用此限定符創(chuàng)建布局資源 res/layout-sw600dp/。僅當(dāng)可用屏幕的最小尺寸至少為 600dp(無(wú)論 600dp 表示的邊是用戶所認(rèn)為的高度還是寬度)時(shí),系統(tǒng)才會(huì)使用這些資源。最小寬度為設(shè)備的固定屏幕尺寸特征;即使屏幕方向發(fā)生變化,設(shè)備的最小寬度仍會(huì)保持不變。

使用最小寬度確定一般屏幕尺寸非常有用,因?yàn)閷挾韧ǔJ窃O(shè)計(jì)布局時(shí)的驅(qū)動(dòng)因素。界面經(jīng)常會(huì)垂直滾動(dòng),但對(duì)其水平方向所需要的最小空間具有非常硬性的限制??捎脤挾纫彩谴_定是否對(duì)手持式設(shè)備使用單窗格布局,或?qū)ζ桨咫娔X使用多窗格布局的關(guān)鍵因素。因此,您可能最關(guān)注每臺(tái)設(shè)備上的最小可能寬度。

設(shè)備的最小寬度會(huì)將屏幕裝飾元素和系統(tǒng)界面考慮在內(nèi)。例如,如果設(shè)備屏幕上的某些永久性界面元素沿著最小寬度軸占據(jù)空間,則系統(tǒng)會(huì)聲明最小寬度小于實(shí)際屏幕尺寸,因?yàn)檫@些屏幕像素不適用于您的界面。

以下是一些可用于常見(jiàn)屏幕尺寸的值:

  • 320,適用于屏幕配置如下的設(shè)備:
    • 240x320 ldpi(QVGA 手機(jī))
    • 320x480 mdpi(手機(jī))
    • 480x800 hdpi(高密度手機(jī))
  • 480,適用于 480x800 mdpi 之類(lèi)的屏幕(平板電腦/手機(jī))。
  • 600,適用于 600x1024 mdpi 之類(lèi)的屏幕(7 英寸平板電腦)。
  • 720,適用于 720x1280 mdpi 之類(lèi)的屏幕(10 英寸平板電腦)。

當(dāng)應(yīng)用為多個(gè)資源目錄提供不同的 smallestWidth 限定符值時(shí),系統(tǒng)會(huì)使用最接近(但未超出)設(shè)備 smallestWidth 的值。

此項(xiàng)為 API 級(jí)別 13 中的新增配置。

另請(qǐng)參閱 android:requiresSmallestWidthDp 屬性(聲明與應(yīng)用兼容的最小 smallestWidth)和 smallestScreenWidthDp 配置字段(存放設(shè)備的 smallestWidth 值)。

如需了解有關(guān)不同屏幕設(shè)計(jì)和使用此限定符的詳細(xì)信息,請(qǐng)參閱支持多種屏幕開(kāi)發(fā)者指南。

可用寬度w<N>dp

示例:
w720dp
w1024dp
等等

指定資源應(yīng)使用的最小可用屏幕寬度(以 dp 為單位,由 <N> 值定義)。當(dāng)屏幕方向在橫向和縱向之間切換時(shí),此配置值也會(huì)隨之變化,以匹配當(dāng)前的實(shí)際寬度。

此功能往往有助于確定是否使用多窗格布局,因?yàn)榧幢阍谑褂闷桨咫娔X設(shè)備時(shí),您通常也不希望豎屏以橫屏的方式使用多窗格布局。因此,您可以使用此功能指定布局所需的最小寬度,而無(wú)需同時(shí)使用屏幕尺寸和屏幕方向限定符。

應(yīng)用為此配置提供具有不同值的多個(gè)資源目錄時(shí),系統(tǒng)會(huì)使用最接近(但未超出)設(shè)備當(dāng)前屏幕寬度的值。此處的值會(huì)考慮屏幕裝飾元素,因此如果設(shè)備顯示屏的左邊緣或右邊緣上有一些永久性 UI 元素,考慮到這些 UI 元素,同時(shí)為減少應(yīng)用的可用空間,設(shè)備會(huì)使用小于實(shí)際屏幕尺寸的寬度值。

此項(xiàng)為 API 級(jí)別 13 中的新增配置。

另請(qǐng)參閱 screenWidthDp 配置字段,該字段存放當(dāng)前屏幕寬度。

如需了解有關(guān)不同屏幕設(shè)計(jì)和使用此限定符的詳細(xì)信息,請(qǐng)參閱支持多種屏幕開(kāi)發(fā)者指南。

可用高度h<N>dp

示例:
h720dp
h1024dp
等等

指定資源應(yīng)使用的最小可用屏幕高度(以“dp”為單位,由 <N> 值定義)。當(dāng)屏幕方向在橫向和縱向之間切換時(shí),此配置值也會(huì)隨之變化,以匹配當(dāng)前的實(shí)際高度。

對(duì)比使用此方式定義布局所需高度與使用 w<N>dp 定義所需寬度,二者均非常有用,且都無(wú)需同時(shí)使用屏幕尺寸和方向限定符。但大多數(shù)應(yīng)用不需要此限定符,因?yàn)榻缑娼?jīng)常垂直滾動(dòng),所以高度需更有彈性,而寬度則應(yīng)更固定。

當(dāng)應(yīng)用為此配置提供具有不同值的多個(gè)資源目錄時(shí),系統(tǒng)會(huì)使用最接近(但未超出)設(shè)備當(dāng)前屏幕高度的值。此處的值會(huì)考慮屏幕裝飾元素,因此如果設(shè)備顯示屏的上邊緣或下邊緣上有一些永久性 UI 元素,考慮到這些 UI 元素,同時(shí)為減少應(yīng)用的可用空間,設(shè)備會(huì)使用小于實(shí)際屏幕尺寸的高度值。非固定的屏幕裝飾元素(例如,全屏?xí)r可隱藏的手機(jī)狀態(tài)欄)并在考慮范圍內(nèi),標(biāo)題欄或操作欄等窗口裝飾亦如此,因此應(yīng)用必須準(zhǔn)備好處理稍小于其指定值的空間。

此項(xiàng)為 API 級(jí)別 13 中的新增配置。

另請(qǐng)參閱 screenHeightDp 配置字段,該字段存放當(dāng)前屏幕寬度。

如需了解有關(guān)不同屏幕設(shè)計(jì)和使用此限定符的詳細(xì)信息,請(qǐng)參閱支持多種屏幕開(kāi)發(fā)者指南。

屏幕尺寸small
normal
large
xlarge
  • small:尺寸類(lèi)似于低密度 VGA 屏幕的屏幕。小屏幕的最小布局尺寸約為 320x426 dp。例如,QVGA 低密度屏幕和 VGA 高密度屏幕。
  • normal:尺寸類(lèi)似于中等密度 HVGA 屏幕的屏幕。標(biāo)準(zhǔn)屏幕的最小布局尺寸約為 320x470 dp。例如,WQVGA 低密度屏幕、HVGA 中等密度屏幕、WVGA 高密度屏幕。
  • large:尺寸類(lèi)似于中等密度 VGA 屏幕的屏幕。大屏幕的最小布局尺寸約為 480x640 dp。例如,VGA 和 WVGA 中等密度屏幕。
  • xlarge:明顯大于傳統(tǒng)中等密度 HVGA 屏幕的屏幕。超大屏幕的最小布局尺寸約為 720x960 dp。在大多數(shù)情況下,屏幕超大的設(shè)備體積太大,不能放進(jìn)口袋,最常見(jiàn)的是平板式設(shè)備。此項(xiàng)為 API 級(jí)別 9 中的新增配置。

請(qǐng)注意:使用尺寸限定符并不表示資源適用于該尺寸的屏幕。如果沒(méi)有為備用資源提供最符合當(dāng)前設(shè)備配置的限定符,則系統(tǒng)可能會(huì)使用其中最匹配的資源。

注意:如果所有資源均使用大于當(dāng)前屏幕的尺寸限定符,則系統(tǒng)不會(huì)使用這些資源,并且應(yīng)用將在運(yùn)行時(shí)崩潰(例如,如果所有布局資源均以 xlarge 限定符標(biāo)記,但設(shè)備是標(biāo)準(zhǔn)尺寸的屏幕)。

此項(xiàng)為 API 級(jí)別 4 中的新增配置。

如需了解詳細(xì)信息,請(qǐng)參閱支持多種屏幕。

另請(qǐng)參閱 screenLayout 配置字段,該字段指示屏幕是小尺寸、標(biāo)準(zhǔn)尺寸還是大尺寸。

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

此項(xiàng)為 API 級(jí)別 4 中新增配置。

此配置完全基于屏幕的縱橫比(寬屏較寬),并且與屏幕方向無(wú)關(guān)。

另請(qǐng)參閱 screenLayout 配置字段,該字段指示屏幕是否為寬屏。

圓形屏幕round
notround
  • round:圓形屏幕,例如圓形可穿戴式設(shè)備
  • notround:方形屏幕,例如手機(jī)或平板電腦

此項(xiàng)為 API 級(jí)別 23 中的新增配置。

另請(qǐng)參閱 isScreenRound() 配置方法,該方法指示屏幕是否為圓形屏幕。

廣色域widecg
nowidecg
  • {@code widecg}:顯示廣色域,如 Display P3 或 AdobeRGB
  • {@code nowidecg}:顯示窄色域,如 sRGB

此項(xiàng)為 API 級(jí)別 26 中的新增配置。

另請(qǐng)參閱 isScreenWideColorGamut() 配置方法,該方法指示屏幕是否具有廣色域。

高動(dòng)態(tài)范圍 (HDR)highdr
lowdr
  • {@code highdr}:顯示高動(dòng)態(tài)范圍
  • {@code lowdr}:顯示低/標(biāo)準(zhǔn)動(dòng)態(tài)范圍

此項(xiàng)為 API 級(jí)別 26 中的新增配置。

另請(qǐng)參閱 isScreenHdr() 配置方法,該方法指示屏幕是否具有 HDR 功能。

屏幕方向port
land
  • port:設(shè)備處于縱向(垂直)
  • land:設(shè)備處于橫向狀態(tài)(水平)

如果用戶旋轉(zhuǎn)屏幕,此配置可能會(huì)在應(yīng)用生命周期中發(fā)生變化。如需了解這會(huì)在運(yùn)行時(shí)期間給應(yīng)用帶來(lái)哪些影響,請(qǐng)參閱處理運(yùn)行時(shí)變更。

另請(qǐng)參閱 orientation 配置字段,該字段指示當(dāng)前的設(shè)備方向。

界面模式car
desk
television
appliance
watch
vrheadset
  • car:設(shè)備正在車(chē)載手機(jī)座上顯示
  • desk:設(shè)備正在桌面手機(jī)座上顯示
  • television:設(shè)備正在通過(guò)電視顯示內(nèi)容,通過(guò)將界面投影到離用戶較遠(yuǎn)的大屏幕上,為用戶提供“十英尺”體驗(yàn)。主要面向遙控交互或其他非觸控式交互
  • appliance:設(shè)備正在用作沒(méi)有顯示屏的裝置
  • watch:設(shè)備配有顯示屏,并且可戴在手腕上
  • vrheadset:設(shè)備正在通過(guò)虛擬現(xiàn)實(shí)耳機(jī)顯示內(nèi)容

此項(xiàng)為 API 級(jí)別 8 中的新增配置,API 13 中的新增電視配置,API 20 中的新增手表配置。

如需了解應(yīng)用在設(shè)備插入基座或從中移除時(shí)的響應(yīng)方式,請(qǐng)閱讀確定并監(jiān)控插接狀態(tài)和類(lèi)型。

如果用戶將設(shè)備插入基座,此配置可能會(huì)在應(yīng)用生命周期中發(fā)生變化。您可以使用 UiModeManager 啟用或禁用其中的部分模式。如需了解這會(huì)在運(yùn)行時(shí)期間給應(yīng)用帶來(lái)哪些影響,請(qǐng)參閱處理運(yùn)行時(shí)變更。

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

此項(xiàng)為 API 級(jí)別 8 中的新增配置。

如果夜間模式停留在自動(dòng)模式(默認(rèn)),此配置可能會(huì)在應(yīng)用生命周期中發(fā)生變化。在此情況下,該模式會(huì)根據(jù)當(dāng)天的時(shí)間進(jìn)行調(diào)整。您可以使用 UiModeManager 啟用或禁用此模式。如需了解這會(huì)在運(yùn)行時(shí)期間給應(yīng)用帶來(lái)哪些影響,請(qǐng)參閱處理運(yùn)行時(shí)變更。

屏幕像素密度 (dpi)ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
nnndpi
  • ldpi:低密度屏幕;約為 120dpi。
  • mdpi:中等密度(傳統(tǒng) HVGA)屏幕;約為 160dpi。
  • hdpi:高密度屏幕;約為 240dpi。
  • xhdpi:超高密度屏幕;約為 320dpi。此項(xiàng)為 API 級(jí)別 8 中的新增配置
  • xxhdpi:絕高密度屏幕;約為 480dpi。此項(xiàng)為 API 級(jí)別 16 中的新增配置
  • xxxhdpi:極高密度屏幕使用(僅限啟動(dòng)器圖標(biāo),請(qǐng)參閱支持多種屏幕中的注釋?zhuān)?;約為 640dpi。此項(xiàng)為 API 級(jí)別 18 中的新增配置
  • nodpi:可用于您不希望為匹配設(shè)備密度而進(jìn)行縮放的位圖資源。
  • tvdpi:密度介于 mdpi 和 hdpi 之間的屏幕;約為 213dpi。此限定符并非指“基本”密度的屏幕。它主要用于電視,且大多數(shù)應(yīng)用都不使用該密度 — 大多數(shù)應(yīng)用只會(huì)使用 mdpi 和 hdpi 資源,而且系統(tǒng)將根據(jù)需要對(duì)這些資源進(jìn)行縮放。此項(xiàng)為 API 級(jí)別 13 中的新增配置
  • anydpi:此限定符適合所有屏幕密度,其優(yōu)先級(jí)高于其他限定符。這非常適用于矢量可繪制對(duì)象。此項(xiàng)為 API 級(jí)別 21 中的新增配置
  • nnndpi:用于表示非標(biāo)準(zhǔn)密度,其中 nnn 是正整數(shù)屏幕密度。此限定符不適用于大多數(shù)情況。使用標(biāo)準(zhǔn)密度存儲(chǔ)分區(qū),可顯著減少因支持市場(chǎng)上各種設(shè)備屏幕密度而產(chǎn)生的開(kāi)銷(xiāo)。

六個(gè)基本密度之間的縮放比為 3:4:6:8:12:16(忽略 tvdpi 密度)。因此,9x9 (ldpi) 位圖相當(dāng)于 12x12 (mdpi)、18x18 (hdpi)、24x24 (xhdpi) 位圖,依此類(lèi)推。

如果您認(rèn)為圖像資源在電視或其他某些設(shè)備上的呈現(xiàn)效果不夠好,進(jìn)而想嘗試使用 tvdpi 資源,則縮放系數(shù)應(yīng)為 1.33*mdpi。例如,mdpi 屏幕的 100px x 100px 圖像應(yīng)相當(dāng)于 tvdpi 屏幕的 133px x 133px 圖像。

請(qǐng)注意:使用密度限定符并不表示資源適用于該密度的屏幕。如果沒(méi)有為備用資源提供最符合當(dāng)前設(shè)備配置的限定符,則系統(tǒng)可能使用其中最匹配的資源。

如需詳細(xì)了解如何處理不同屏幕密度以及 Android 如何縮放位圖以適應(yīng)當(dāng)前密度,請(qǐng)參閱支持多種屏幕。

觸摸屏類(lèi)型notouch
finger
  • notouch:設(shè)備沒(méi)有觸摸屏。
  • finger:設(shè)備有一個(gè)專(zhuān)供用戶通過(guò)手指直接進(jìn)行交互的觸摸屏。

另請(qǐng)參閱 touchscreen 配置字段,該字段指示設(shè)備上的觸摸屏類(lèi)型。

鍵盤(pán)可用性keysexposed
keyshidden
keyssoft
  • keysexposed:設(shè)備擁有可用的鍵盤(pán)。如果設(shè)備啟用了軟鍵盤(pán)(不無(wú)可能),那么即使用戶找到硬鍵盤(pán),或者該設(shè)備沒(méi)有硬鍵盤(pán),也可使用此限定符。如果未提供或已禁用軟鍵盤(pán),則只有在配備硬鍵盤(pán)的情況下才可使用此限定符。
  • keyshidden:設(shè)備具有可用的硬鍵盤(pán),但其處于隱藏狀態(tài),設(shè)備啟用軟鍵盤(pán)。
  • keyssoft:設(shè)備已啟用軟鍵盤(pán)(無(wú)論是否可見(jiàn))。

如果您提供了 keysexposed 資源,但未提供 keyssoft 資源,則無(wú)論鍵盤(pán)是否可見(jiàn),只要系統(tǒng)已啟用軟鍵盤(pán),其便會(huì)使用 keysexposed 資源。

如果用戶打開(kāi)硬鍵盤(pán),此配置可能會(huì)在應(yīng)用生命周期中發(fā)生變化。如需了解這會(huì)在運(yùn)行時(shí)期間給應(yīng)用帶來(lái)哪些影響,請(qǐng)參閱處理運(yùn)行時(shí)變更。

另請(qǐng)參閱配置字段 hardKeyboardHidden 和 keyboardHidden,二者分別指示硬鍵盤(pán)的可見(jiàn)性和任一鍵盤(pán)(包括軟鍵盤(pán))的可見(jiàn)性。

主要的文本輸入法nokeys
qwerty
12key
  • nokeys:設(shè)備沒(méi)有用于文本輸入的硬按鍵。
  • qwerty:設(shè)備擁有標(biāo)準(zhǔn)硬鍵盤(pán)(無(wú)論是否對(duì)用戶可見(jiàn))。
  • 12key:設(shè)備擁有 12 鍵硬鍵盤(pán)(無(wú)論是否對(duì)用戶可見(jiàn))。

另請(qǐng)參閱 keyboard 配置字段,該字段指示可用的主要文本輸入法。

平臺(tái)版本(API 級(jí)別)示例:
v3
v4
v7
等等

設(shè)備支持的 API 級(jí)別。例如,v1 對(duì)應(yīng) API 級(jí)別 1(裝有 Android 1.0 或更高版本系統(tǒng)的設(shè)備),v4 對(duì)應(yīng) API 級(jí)別 4(裝有 Android 1.6 或更高版本系統(tǒng)的設(shè)備)。如需了解有關(guān)這些值的詳細(xì)信息,請(qǐng)參閱 Android API 級(jí)別文檔。

請(qǐng)注意:自 Android 1.0 起便已添加部分配置限定符,因此并非所有版本的 Android 系統(tǒng)都支持所有限定符。使用新限定符會(huì)隱式添加平臺(tái)版本限定符,因此較舊版本系統(tǒng)的設(shè)備必然會(huì)忽略它。例如,使用 w600dp 限定符會(huì)自動(dòng)包括 v13 限定符,因?yàn)榭捎脤挾认薅ǚ?API 級(jí)別 13 中的新增配置。為避免出現(xiàn)任何問(wèn)題,請(qǐng)始終包含一組默認(rèn)資源(一組不帶限定符的資源)。如需了解詳細(xì)信息,請(qǐng)參閱利用資源提供最佳設(shè)備兼容性部分。

3.匹配查找的邏輯

3. 橫豎屏切換時(shí),在新版中更希望用戶使用ViewModel來(lái)進(jìn)行處理

4.本地化,獲取當(dāng)前的語(yǔ)言環(huán)境

  通過(guò) context對(duì)象獲取

java 代碼: Locale primaryLocale = context.getResources().getConfiguration().getLocales().get(0); String locale = primaryLocale.getDisplayName(); kotlin 代碼: val primaryLocale: Locale = context.resources.configuration.locales[0] val locale: String = primaryLocale.displayName

 4.1 使用pseudolocale測(cè)試本地化的界面是否需要優(yōu)化

   開(kāi)啟開(kāi)發(fā)者模式后,在build.gradle中添加

android { ... buildTypes { debug { pseudoLocalesEnabled true } }

5. Unicode 和國(guó)際化支持

  對(duì)于Android 7.0版本 ICU支持的更好可以直接調(diào)用方法,而對(duì)于之前的版本則需要打包進(jìn)apk中

  在Android 7.0版本中使用 android.icu 供開(kāi)發(fā)使用

  對(duì)于早先使用 com.ibm.icu 最好盡快更換為 android.icu

  對(duì)于需要遷移的包有以下這些: Android 和 Java ICU4J 類(lèi) 對(duì)應(yīng)關(guān)系

類(lèi)替代選項(xiàng)
java.lang.Characterandroid.icu.lang.UCharacter
java.text.BreakIteratorandroid.icu.text.BreakIterator
java.text.DecimalFormatandroid.icu.text.DecimalFormat
java.util.Calendarandroid.icu.util.Calendar
android.text.BidiFormatterandroid.icu.text.Bidi
android.text.format.DateFormatandroid.icu.text.DateFormat
android.text.format.DateUtilsandroid.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter

  Android上的 ICU 不遵循用戶的24小時(shí)/12小時(shí)時(shí)間格式設(shè)置,需要單獨(dú)進(jìn)行設(shè)置

java 代碼: String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hm"; String formattedTime = android.icu.text.DateFormat.getInstanceForSkeleton(skeleton, Locale.getDefault()).format(new Date()); kotlin 代碼: val skeleton: String = if (DateFormat.is24HourFormat(context)) "Hm" else "hm" val formattedTime: String = android.icu.text.DateFormat.getInstanceForSkeleton( skeleton, Locale.getDefault()).format(Date() )

6. 音譯器

  Android 10(API 級(jí)別 29)及更高版本提供 Transliterator ,用于將文字從一種格式音譯為另一種格式。在不同的 Android 版本和設(shè)備上,可用的音譯 ID 組不穩(wěn)定。設(shè)備制造商可能會(huì)添加額外的音譯 ID。開(kāi)發(fā)者必須先檢查可用的 ID(從 Transliterator.getAvailableIDs() 獲得),然后在對(duì)文字進(jìn)行音譯。

7. 本地語(yǔ)言設(shè)置策略

例如,假設(shè)您遇到了以下情況:

  • 您的應(yīng)用的默認(rèn)語(yǔ)言為 en_US (US English),但它也在 es_ES 資源文件中對(duì)西班牙字符串進(jìn)行了本地化。
  • 將設(shè)備設(shè)置為 es_MX

當(dāng)您的 Java 代碼引用字符串時(shí),系統(tǒng)會(huì)從默認(rèn) (en_US) 資源文件加載字符串,即使應(yīng)用在 es_ES 下有本地化的西班牙語(yǔ)資源。這是因?yàn)楫?dāng)系統(tǒng)無(wú)法找到精確匹配時(shí),它會(huì)繼續(xù)通過(guò)將國(guó)家/地區(qū)代碼從語(yǔ)言區(qū)域中剝離來(lái)查找資源。最后,如果未找到匹配,系統(tǒng)會(huì)恢復(fù)為默認(rèn)模式,即 en_US。

如果用戶選擇應(yīng)用根本不支持的語(yǔ)言(如法語(yǔ)),則系統(tǒng)也會(huì)默認(rèn)顯示 en_US。例如:

表 1. 沒(méi)有精確語(yǔ)言區(qū)域匹配項(xiàng)的資源解析。

用戶設(shè)置應(yīng)用資源資源解析
fr_CH默認(rèn)值 (en)
de_DE
es_ES
fr_FR
it_IT
嘗試 fr_CH => 失敗
嘗試 fr => 失敗
使用默認(rèn)值 (en)

在此示例中,系統(tǒng)在不知道用戶是否理解英語(yǔ)的情況下顯示英語(yǔ)字符串。目前,此行為很常見(jiàn)

在Android 7.0 后的方法:

  1. 之前將西班牙語(yǔ)資源存儲(chǔ)在 values-es-rUS 目錄中,請(qǐng)將其移至包含拉丁美洲西班牙語(yǔ)的 values-b+es+419 目錄中。同樣,如果您在名為 values-en-rGB 的目錄中存儲(chǔ)有資源字符串,請(qǐng)將此目錄重命名為 values-b+en+001(國(guó)際英語(yǔ)),因?yàn)?nbsp;en-GB 字符串的最常用母語(yǔ)為 en-001

  2. 在API 級(jí)別 24 開(kāi)始,Android 顯示的 LocaleList.getDefault() API 可讓?xiě)?yīng)用直接查詢用戶已指定的語(yǔ)言列表。您可以使用此 API 創(chuàng)建更成熟的應(yīng)用行為和更優(yōu)化的內(nèi)容顯示。例如,搜索可以基于用戶的設(shè)置以多種語(yǔ)言顯示結(jié)果。瀏覽器應(yīng)用可避免翻譯以用戶理解的語(yǔ)言顯示的頁(yè)面,鍵盤(pán)應(yīng)用可自動(dòng)啟用所有適用的布局

8 動(dòng)畫(huà)矢量

  在之前可能需要3個(gè) xml文件 例如

  res/drawable/avd.xml

<?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/vectordrawable" > <target android:name="rotationGroup" android:animation="@anim/rotation" /> </animated-vector>

res/drawable/vectordrawable.xml

<?xml version="1.0" encoding="utf-8"?> <vector xmlns:android="http://schemas.android.com/apk/res/android" android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:fillColor="#000000" android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> </group> </vector>  

res/anim/rotation.xml

<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/android" android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" />

現(xiàn)在可以合成為一個(gè)xml文件

 res/drawable/avd.xml

<?xml version="1.0" encoding="utf-8"?> <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" xmlns:aapt="http://schemas.android.com/aapt" > <aapt:attr name="android:drawable" > <vector android:height="64dp" android:width="64dp" android:viewportHeight="600" android:viewportWidth="600" > <group android:name="rotationGroup" android:pivotX="300.0" android:pivotY="300.0" android:rotation="45.0" > <path android:fillColor="#000000" android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" /> </group> </vector> </aapt:attr> <target android:name="rotationGroup"> <aapt:attr name="android:animation" > <objectAnimator android:duration="6000" android:propertyName="rotation" android:valueFrom="0" android:valueTo="360" /> </aapt:attr> </target> </animated-vector>

本文名稱(chēng):Android復(fù)習(xí)(二)應(yīng)用資源-創(chuàng)新互聯(lián)
新聞來(lái)源:http://bm7419.com/article6/ggsog.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、虛擬主機(jī)商城網(wǎng)站ChatGPT、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)