支持不同的设备
支持不同的语言
其实就是在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现在运行的版本