Android本地化

文章目錄


##支持不同語言
Android平臺能夠在運行時根據本地區域設置來選擇不同語言。如果所有string都來源strings.xml,那麼定義可選的string.xml文件,android系統在運行時會進行正確選擇。

實現方法:
默認創建的string.xml在res/values/目錄下。爲支持不同語言,在res/目錄下創建包含"-“和ISO語言碼的values目錄,形如"values-es”(es爲ISO語言碼)。完整目錄結構如下:
MyProject/
 res/
  values/
   strings.xml
  values-es/
   strings.xml
  values-fr/
   strings.xml
##支持不同屏幕
Android設備以兩個屬性進行分類:size(尺寸)、density(像素密度)。

size分爲:small、normal、large、xlarge、landscape、portrait
density分爲:low(ldpi)、medium(mdpi)、hight(hdpi)、extra hight(xhdpi)
隨着手機越來越大,分辨率越來越高,size和density可能不止上面幾種。

適配不同size和density屏幕的機制和多語言支持是一樣的,主要就是爲不同的size提供可選layout,爲不同density提供可選drawable。

支持不同size方法:
在res/目錄下創建以"-<screen_size>“爲後綴的layout目錄,形如"res/layout-large”。佈局文件名必須是一致的。完整目錄結構如下:
MyProject/
 res/
  layout/
   main.xml
  layout-large/
   main.xml

注意:android會自動縮放佈局來正確適應屏幕(dp爲單位的尺寸與像素密度無關)。因此,重心應該放在佈局結構而不是UI元素的絕對尺寸上。

默認layout/main.xml用於豎屏。
如果想爲large屏幕和landscape提供一個layout,可以組合使用:
res/layout-large-land/main.xml

注意:Android 3.2和以上版本提供了一種高級方法來支持不同屏幕大小。https://developer.android.com/training/multiscreen/index.html

density分類及相關比例:
MDPI : 160 DPI
HDPI = 1.5 x MDPI = 240 DPI
XHDPI = 2 x MDPI = 320 DPI
XXHDPI = 3 X MDPI = 480 DPI
XXXHDPI = 4 X MDPI = 640 DPI
在MDPI下1dp=1px

支持不同density方法:在相應drawable文件夾下放不同分辨率圖片。目錄結構如下:
MyProject/
 res/
  drawable-xhdpi/
   awesomeimage.png
  drawable-hdpi/
   awesomeimage.png
  drawable-mdpi/
   awesomeimage.png
  drawable-ldpi/
   awesomeimage.png

注意:可以不用在ldpi資源不是必須的。當有更高分辨率資源時,系統會自動縮小圖片來適應ldpi屏幕。因此,只需準備需要支持的最大分辨率屏幕的圖片即可。
##支持不同平臺版本
由於Android是開源的,導致版本碎片化嚴重,開發過程要儘可能兼容市面上大多數版本。
注意:爲了舊版本系統也能夠使用最新發布版本的特性,Google會同時推出向下兼容的Android Support Library。舊版本使用這個包即可
使用新版本的Api。

在AdroidManifest.xml文件會指定兩個屬性:minSdkVersion,targetSdkVersion。minSdkVersion表示app兼容的最低api級別,targetSdkVersion表示app設計和測試使用的最高api級別。爲了使app能夠使用新版本特性以及適應大多數手機設備,targetSdkVersion應該緊跟最新Android版本。

有些代碼依賴高版本api,可以在運行進行系統版本檢查:

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

注意:在XML文件裏可以放心使用新屬性,低版本會直接忽略新屬性。

給Activity指定主題:

<activity android:theme="@android:style/Theme.Dialog">

給所有Activity指定主題:

<application android:theme="@style/CustomTheme">
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章