<div id="language"/>
语言适配
在包含文字的UI中,最好将文字与代码分离开。Android为我们提供了一个res目录:
为了支持不同的语言适配,
- 我们需要在res目录下根据不同地区建立不同的values-xxx文件,其中xxx代表国家简写
- 在values-xxx下新建一个strings.xml文件
- 编写各个values下的strings.xml
4.在布局中使用@string/title引用strings.xml中的值,系统会根据机器的本地语言选择合适的引用来源
//在xml中
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/title"/>
//在代码中:
TextView textView=(TextView) findViewById(R.id.textView);
textView.setText(R.string.title);
<span id="screen"/>
屏幕适配
Android 通过尺寸大小和密度来定义不同的屏幕。
- 大小:small、normal、large、xlarge
- 密度: low (ldpi), medium (mdpi), high (hdpi), extra high (xhdpi)
和适配语言一样,通过创建不同的文件,来适配不同的屏幕,比如laytouts以及bitmap。
还有一个需要适配的地方就是屏幕的方向(横竖屏)
创建不同的layouts目录
为了适配不同大小或屏幕方向的屏幕,通过创建layouts-<尺寸或方向>类似的目录进行适配。Android 系统会在app运行的时候,根据屏幕的大小以及方向来选择合适的布局文件。
MyProject/
res/
layout/ # 默认(竖屏)
main.xml
layout-land/ # 横屏
main.xml
layout-large/ # 大尺寸(竖屏)
main.xml
layout-large-land/ # 大尺寸 横屏
main.xml
创建不同分辨率的bitmap
不同的机器,屏幕分辨率是不同的。如果为一个高分辨率的机器提供一张低分辨率的图片来显示,那么图片看起来就会很模糊,用户体验不好。如果在一个低分辨率的机器上显示一张高分辨率的图片,显示的还是低分辨率图片,而且会导致不必要的内存开销。
因此为不同分辨率的屏幕提供合适分辨率的图片是很有必要的。
不同分辨率对应的缩放比如下:
xhdpi: 2.0
hdpi: 1.5
mdpi: 1.0 (baseline)
ldpi: 0.75
缩放比是啥意思呢?假如有一张 100*100 像素的mdpi图片,那么对应的其他分辨率为:
xhdpi: 2.0 -> 200*200 px
hdpi: 1.5 -> 150*150 px
mdpi: 1.0 -> 100*100 px
ldpi: 0.75 -> 75*75 px
在使用Andriod Studio创建项目的时候,为我们提供了不同分辨率的目录,我们只需将不同的分辨率的图片放入对应的目录下即可
<div id="sdk"/>
版本适配
由于Android SDK有许多不同的版本,因此不同的版本之间可能存在差异。比如新版本添加了一个新功能,如果将该App安装到低版本的机器上,那么机器肯定会不支持,从而导致崩溃。
查看当前开发的sdk版本配置,在Android Studio 创建项目时,会在项目根目录下,生成build.gradle文件:
andriod{
...
compileSdkVersion 23 //当前编译使用的SDK版本
defaultConfig{
...
minSdkVersion 15 //允许运行的最低SDK版本
targetSdkVersion 23 //当前SDK版本
versionCode 1
versionName "1.0"
}
...
}
为了解决不同 版本之间可能存在的差异,我们可以在运行时通过 Build.VERSION.SDK_INT 获取本机的sdk版本来做相应的操作:
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);
}
}