文章目錄
##支持不同語言
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">