Android支持多種設備的方法及資源文件的使用


Android支持多種設備的方法及資源文件的使用

  

  為不同的設備提供不同的資源,主要是利用特殊命名的資源文件夾來實現的。

  在運行時,Android系統根據當前的設備設置自動尋找合適的資源。

 

默認資源(Default Resources

  編寫應用的時候,需要創建一組默認的資源和一些可選針對特定配置的資源。

  默認資源是很重要的。

  這些情況下會使用默認資源:

  當應用處在特定配置下,而程序並沒有提供這個配置下的相應資源,會使用默認資源;

  新的Android版本增加的資源文件修飾符,舊版本不支持該特性,會使用默認資源;

  即便處在特定配置下,而相應資源在該配置下替代資源中沒有查找到時,也會使用默認資源。

  這里只有一個例外:如果應用程序的minSdkVersion設置為4或者是更高,就可以只提供帶有屏幕密度限定符(ldpi、mdpi、hdpi、xhdpi、nodpi、tvdpi)的替代資源,不用設置默認的drawable資源,Andorid系統會自動尋找相應最好的匹配,並且對位圖進行縮放。

  如果默認資源缺失,編譯器並不會報錯,但是當運行時找不到時,用戶會看到錯誤信息和一個強制關閉的按鈕。

  Important: Make sure that your application includes a full set of default resources.

  默認資源是一個完備的集合,程序中用到的每一個資源都應該定義了一個默認的資源。

  而一個本地化的資源可以是不完備的,只包含一個子集,當某些資源缺失時,會轉而讀取默認資源中的相應資源。

  測試默認資源時可以把裝置設置到一個應用並不支持的設置狀態下。

  比如測試字符串資源,應用程序支持英文和中文(提供了相應的資源),默認是英文。但是把裝置語言設置成日文,此時應該顯示默認資源(英文),如果默認資源缺失,就會出現強制關閉的按鈕。

  res/目錄下一般包含了所有的資源目錄,其中默認資源目錄如下:

MyProject/

  res/

    animator/

    anim/

    color/

    drawable/

    layout/

            menu/

            raw/

    values/

     xml/

        

  其中values/中常用的文件命名規范:

  arrays.xml for resource arrays (typed arrays).

  colors.xml for color values

  dimens.xml for dimension values.

  strings.xml for string values.

  styles.xml for styles.

 

替代資源(Alternative Resources)

  Android系統在運行時根據設備格局自動檢測並選擇資源載入,針對特定的格局提供替代資源時,在res/目錄下增加相應的目錄(資源目錄不能嵌套)。

  該文件夾需要遵循一定的命名規則:<resources_name>-<config_qualifier>。

  resources_name為相應的默認資源目錄名。

  config_qualifier為限定符,指定特定的格局或配置,多個限定符可用短划線隔開。多個限定符時要注意一定的連接順序,否則資源會直接被忽略。

  在http://developer.android.com/guide/topics/resources/providing-resources.html

  中有一個表Table 2,多個限定符連接時必須要保持它們在表中的先后順序。

  注意:命名是不區分大小寫的。

  相應的資源存儲在新的目錄下,資源的名字必須和它們在默認目錄下的對應資源一致。

 

查詢設備狀態

  String locale = context.getResources().getConfiguration().locale.getDisplayName();

 

別名資源(Alias Resources)

  有的時候兩種特殊配置下可能想用同一種資源,這時候除了將資源復制兩份放在不同的目錄下之外,采用別名的機制處理更好。

  這種方式不是對所有資源都適用,這種特性只適用於圖像、布局、字符串和其他簡單值的資源(Drawable、Layout、Strings and other simple values)。

  具體方法見:

  http://developer.android.com/guide/topics/resources/providing-resources.html

  本文不再詳述。

 

發現最匹配資源的策略

附上圖一張:

 

 

 

支持不同的語言

  http://developer.android.com/training/basics/supporting-devices/languages.html

  支持不同的語言主要是利用不同的目錄下的字符文件,比如:

  res/values/strings.xml 包含默認語言的字符串。

  res/values-fr/strings.xml 包含法文的字符串。

  res/values-ja/strings.xml 包含日文的字符串。

  資源的名字對應好,那么根據不同的本地設置就會自動選擇相應的語言。

  語言的限定符(Qualifier Values)有兩種:

  第一種是語言編碼:

  ISO 639-1:http://www.loc.gov/standards/iso639-2/php/code_list.php

  語言編碼由兩個字母構成。

  第二種是區域編碼:

  ISO 3166-1-alpha-2:

  http://www.iso.org/iso/prods-services/iso3166ma/02iso-3166-code-lists/country_names_and_code_elements

  區域編碼也由兩個小寫字母構成,但是前面要加上一個小寫的r。

  區域編碼是一個可選項,也可以只使用語言編碼。

  例子:

  en

  fr

  en-rUS

  fr-rFR

  fr-Rca

  創建資源文件的時候可以在Eclipse左邊導航窗口右鍵單擊,選擇new->Others->Android XML File。

  選擇好對應項目和資源類型(Values)之后,輸入文件名strings.xml,然后點擊Next,就可以自己選擇限定符和填寫值了,完成之后目錄就自動創建了。

  比較常用的目錄:

  values-zh-rCN簡體中文

  values-zh-rTW繁體中文

 

支持不同的屏幕

  http://developer.android.com/training/basics/supporting-devices/screens.html

  http://developer.android.com/training/multiscreen/index.html

  Android利用尺寸(size)和密度(density)對屏幕進行分類。

  尺寸有四種:small, normal, large, xlarge。

  密度(分辨率)也有四種:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)。

  另外屏幕的方向(screens orientation)也是需要考慮的一個方面:landscape為橫向,portrait為縱向

 

設置不同的布局

  根據不同的屏幕尺寸可以安排不同的布局。

  采用加上限定符的布局文件目錄即可,如:

MyProject/

    res/

        layout/              # default (portrait)

            main.xml

        layout-land/         # landscape

            main.xml

        layout-large/        # large (portrait)

            main.xml

        layout-large-land/   # large landscape

            main.xml

 

使用不同的位圖

  密度(density)是指單位英寸的像素值,也即屏幕的分辨率。根據分辨率的不同提供不同的界面元素圖片。

  目錄資源可以設置如下:

MyProject/

    res/

        drawable-xhdpi/

            awesomeimage.png

        drawable-hdpi/

            awesomeimage.png

        drawable-mdpi/

            awesomeimage.png

        drawable-ldpi/

            awesomeimage.png

 

  用的時候@drawable/awesomeimage引用,系統會根據屏幕密度選擇合適的圖片版本。

  圖像資源的生成,采用矢量圖,利用如下比例:

  xhdpi: 2.0

  hdpi: 1.5

  mdpi: 1.0 (baseline)

  ldpi: 0.75

 

參考資料

  支持不同的設備:

  http://developer.android.com/training/basics/supporting-devices/index.html

  本地化:

  http://developer.android.com/guide/topics/resources/localization.html

  提供資源:

  http://developer.android.com/guide/topics/resources/providing-resources.html

  資源類型:

  http://developer.android.com/guide/topics/resources/available-resources.html

  語言:

  http://developer.android.com/training/basics/supporting-devices/languages.html

  不同的屏幕:

  http://developer.android.com/training/basics/supporting-devices/screens.html

  http://developer.android.com/training/multiscreen/index.html

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM