<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Android復(fù)習(xí)(二)應(yīng)用資源

      1. res下的資源類型

       

      目錄資源類型
      animator/ 用于定義屬性動畫的 XML 文件。
      anim/ 用于定義漸變動畫的 XML 文件。(屬性動畫也可保存在此目錄中,但為了區(qū)分這兩種類型,屬性動畫首選 animator/ 目錄。)
      color/ 用于定義顏色狀態(tài)列表的 XML 文件。請參閱顏色狀態(tài)列表資源
      drawable/

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

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

      請參閱 Drawable 資源

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

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

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

      values/

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

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

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

      請參閱字符串資源樣式資源更多資源類型

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

      注意:切勿將資源文件直接保存在 res/ 目錄內(nèi),因為這樣會造成編譯錯誤。

       

      2.限定符

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

       

       

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

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

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

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

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

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

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

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

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

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

       

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

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

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

      布局方向 ldrtl
      ldltr

      應(yīng)用的布局方向。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.)
      
       

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

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

      smallestWidth sw<N>dp

      示例:
      sw320dp
      sw600dp
      sw720dp
      等等

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

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

      使用最小寬度確定一般屏幕尺寸非常有用,因為寬度通常是設(shè)計布局時的驅(qū)動因素。界面經(jīng)常會垂直滾動,但對其水平方向所需要的最小空間具有非常硬性的限制。可用寬度也是確定是否對手持式設(shè)備使用單窗格布局,或?qū)ζ桨咫娔X使用多窗格布局的關(guān)鍵因素。因此,您可能最關(guān)注每臺設(shè)備上的最小可能寬度。

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

      以下是一些可用于常見屏幕尺寸的值:

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

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

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

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

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

      可用寬度 w<N>dp

      示例:
      w720dp
      w1024dp
      等等

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

      此功能往往有助于確定是否使用多窗格布局,因為即便在使用平板電腦設(shè)備時,您通常也不希望豎屏以橫屏的方式使用多窗格布局。因此,您可以使用此功能指定布局所需的最小寬度,而無需同時使用屏幕尺寸和屏幕方向限定符。

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

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

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

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

      可用高度 h<N>dp

      示例:
      h720dp
      h1024dp
      等等

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

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

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

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

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

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

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

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

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

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

      如需了解詳細信息,請參閱支持多種屏幕

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      觸摸屏類型 notouch
      finger
      • notouch:設(shè)備沒有觸摸屏。
      • finger:設(shè)備有一個專供用戶通過手指直接進行交互的觸摸屏。

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

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

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

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

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

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

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

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

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

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

       

      3.匹配查找的邏輯

       

      3. 橫豎屏切換時,在新版中更希望用戶使用ViewModel來進行處理

       

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

         通過 context對象獲取

       

      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測試本地化的界面是否需要優(yōu)化

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

            

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

        

      5. Unicode 和國際化支持

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

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

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

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

         

      替代選項
      java.lang.Character android.icu.lang.UCharacter
      java.text.BreakIterator android.icu.text.BreakIterator
      java.text.DecimalFormat android.icu.text.DecimalFormat
      java.util.Calendar android.icu.util.Calendar
      android.text.BidiFormatter android.icu.text.Bidi
      android.text.format.DateFormat android.icu.text.DateFormat
      android.text.format.DateUtils android.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter

       

          Android上的 ICU 不遵循用戶的24小時/12小時時間格式設(shè)置,需要單獨進行設(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 級別 29)及更高版本提供 Transliterator ,用于將文字從一種格式音譯為另一種格式。在不同的 Android 版本和設(shè)備上,可用的音譯 ID 組不穩(wěn)定。設(shè)備制造商可能會添加額外的音譯 ID。開發(fā)者必須先檢查可用的 ID(從 Transliterator.getAvailableIDs() 獲得),然后在對文字進行音譯。

       

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

         

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

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

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

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

      表 1. 沒有精確語言區(qū)域匹配項的資源解析。

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

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

       

      在Android 7.0 后的方法:

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

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

       

      8 動畫矢量

         在之前可能需要3個 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)在可以合成為一個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>
          
      

        

       

      posted @ 2020-04-02 14:02  王世楨  閱讀(741)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产办公室秘书无码精品99| 亚洲偷自拍国综合| 国产国语对白露脸正在播放| 天堂亚洲免费视频| 国产精品一区二区三区av| brazzers欧美巨大| 亚洲第一视频区| 激情综合网激情五月俺也想| www亚洲精品| 亚洲一区二区三区小蜜桃| 国产一二三五区不在卡| аⅴ天堂国产最新版在线中文| 天堂va蜜桃一区二区三区| 国产精品福利中文字幕| 成人视频在线观看| 国产成人精品一区二区无| 亚洲精品在线二区三区| 久久成人 久久鬼色| 人人爽亚洲aⅴ人人爽av人人片| 波多野结衣久久一区二区| 又黄又爽又色的免费网站| 悠悠人体艺术视频在线播放| 国产一区二区一卡二卡| 大方县| 国产精品久久久久无码av色戒| 国产精品视频一区不卡| 苍溪县| 老熟妇乱子交视频一区| 亚洲精品久久婷婷丁香51| 国产内射xxxxx在线| 久久青青草原亚洲AV无码麻豆| 中文字幕色av一区二区三区 | 日韩av一区二区不卡在线| 国产精品免费中文字幕 | 亚洲国产理论片在线播放| 国产成人综合色在线观看网站 | 亚洲精品久久一区二区三区四区| 国产jizzjizz视频| 亚洲精品一区二区三区大| 少妇被粗大猛进进出出| 国产成人亚洲精品成人区|