支持不同的設備
支持不同的語言
其實就是在res中創建不同的語言文件夾,例如:
res/
values/
strings.xml
values-es/
strings.xml
values-fr/
strings.xml
然后創建對應的語言文件即可
支持不同分辨率的設備
創建不同的布局文件
android 對于屏幕分類使用兩種特性:size和density;我們的APP應該對不同大小和分辨率的設備都做適配;
主要有四種大小:small, normal, large, xlarge
四種分辨率:low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
跟語言一樣,也是在不同的文件夾中放置這些布局文件就可以了。另外,因為會有橫屏和豎屏兩種模式,所以說為了最佳的用戶體驗,我們的許多APP都應該修改布局來適配不同的模式。
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
名字必須是相同的,這樣子在代碼初始化的時候就會根據屏幕的大小自動選擇相應的布局文件了,而且會自動根據屏幕的方向來決定使用landscape(橫屏模式)還是portrait(豎屏模式)
android 3.2以上支持一個可以定義屏幕大小的高級方法,它能讓你根據密度無關像素的最小寬度和高度來指定不同的資源
創建不同的Bitmaps
提供不同分辨率的bitmap資源來適應不同的密度(?):
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
意思就是說,如果你對xhdpi尺寸的設備生成了一張200200的圖片,那就應該生成同樣的資源——150150(hdpi)、100x100(mdpi)、 75x75(ldpi)。
文件的分布如下
MyProject/
res/
drawable-xhdpi/
awesomeimage.png
drawable-hdpi/
awesomeimage.png
drawable-mdpi/
awesomeimage.png
drawable-ldpi/
awesomeimage.png
任何時候,你引用 @drawable/awesomeimage
,系統都會基于屏幕的分辨率選擇適當的bitmap。
ldpi分辨率的資源不一定要用上,因為系統會自動的對hdpi的資源按比例縮小一半以適配ldpi的屏幕
支持不同的平臺版本
指定最小和目標API Levels
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
...
</manifest>
一般在AndroidManifest.xml中使用 <uses-sdk> 這個元素標簽來定義應用兼容的最低的APIlevel(minSdkVersion)和最高的API Level(targetSdkVersion)
實時檢查系統版本
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);
}
}
如代碼所展示的那樣,你可以通過Build這個類來判斷APP現在運行的版本