兼容不同安卓设备:1.配置不同语言。2.配置不同屏幕。3.配置不同系统版本。 为设置多国语言,可以在res/下创建额外的values目录(以连字符和ISO国家代码结尾命名),比如values-es/是为语言代码为"es"的区域设置的简单的资源文件的目录。然后再values目录下创建strings文件,将不同语言对应的字符串输入到相应的文件。
一.配置不同语言
设置不同的语言可以简单通过工程的资源目录来轻松实现这一功能。
为设置多国语言,可以在res/下创建额外的values目录(以连字符和ISO国家代码结尾命名),比如values-es/
是为语言代码为"es"的区域设置的简单的资源文件的目录。然后再values目录下创建strings文件,将不同语言对应的字符串输入到相应的文件。
如:
res/
values/
strings.xml
values-ko/ ------韩语
strings.xml
values-fr/ ------法语
strings.xml
values-es ------西班牙语
strings.xml
新建后如图:
然后再对应的strings文件中填入对应语言的字符串。
韩语(values-ko/strings.xml):
<string name="title">운용</string>
<string name="hello_world">안녕</string>
法语(values-fr/strings.xml):
<string name="title">Mon Application</string>
<string name="hello_world">Bonjour le monde !</string>
西班牙语(values-es/strings.xml):
<string name="title">Mi Aplicación</string>
<string name="hello_world">Hola Mundo!</string>
在手机中设置系统语言,app中对应字符显示就会显示对应语言的字符串。
二.配置不同屏幕
补充知识:
- 4种普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
- 4种普遍分辨率:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)
- 横屏(land),默认为竖屏。
1.不同的layout:
与不同语言配置相似,在res新建资源目录(目录以layout-<screen_size>
为后缀命名),例如:
res/layout-large/。然后再不同目录下创建命名相同的布局,根据屏幕自定义布局。
例如:
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
2.不同的bitmap:
实现过程类似layout,我们为4种普遍分辨率:低,中,高,超高精度,提供相对应的bitmap资源。使得有更好的画质。
四种分辨率生成密度如下:
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (基准)
- ldpi: 0.75
三.配置不同系统版本
在Manifest.xml文件(build.gradle中)中描述支持的版本。具体来说,<uses-sdk>元素中的minSdkVersion
和targetSdkVersion
属性,标明在设计和测试app时,最低兼容API的级别和最高适用的API级别。
minifest.xml中:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
...
</manifest>
在build.gradle中:
android {
defaultConfig {
minSdkVersion 19
targetSdkVersion 25
...
}
}
运行时检测系统版本:
在运行可能会不兼容的程序时,利用Build常量中供了对每一个版本的唯一代号,在我们的app中使用这些代号可以建立条件,保证依赖于高级别的API的代码,只会在这些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);
}
}