在全世界有各种各样运行有android应用的设备,你有机会通过让你的程序支持多设备的方式来赢得更多地用户。为了能够成功地做到这一点,你需要为程序配置好如多语种、多屏幕分辨率和不同android系统版本等信息。
本课将向你介绍如何将你的应用通过只发布一个apk的方式来实现支持多种设备。
支持多语种
根据android设备所属国家来为应用设置对应的语言是一个很好提升用户体验的方法,android通过在工程目录下创建对应语种的字符串文件的方式来使得android应用很方便地支持多语种。
如果你是通过android SDK来创建你的工程的话,工具会在工程根目录下自动生成一个”res/”文件夹,在这个文件夹下又针对不同资源新建的多个资源文件夹,比如用于存放应用字符串资源的文件”res/values/strings.xml”。
在工程中创建本地目录和字符串资源文件
为了支持多语种,需要在工程目录的”res”文件夹下针对不同语种创建对应的资源文件夹,android系统是通过资源文件夹的文件名来区分语种的,比如”values-es”就是针对使用”es”语言的国家而设计的,android系统会在应用运行时来自动识别当前设备所使用的语种。
一旦你决定将你的应用支持多语种,你就需要在res目录下创建类似于如下结构的树形目录。
在对应的路径下加入对应语种的资源就可以啦。
在程序运行时,android设备会根据系统设置的语种来加载对应的资源。
比如,下面就是针对不同语种创建的不同字符串资源。
English(默认设置),”values/strings.xml”:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">My Application</string>
<string name="hello_world">Hello World!</string>
</resources>
Spanish,”values-es/strings.xml”:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mi Aplicación</string>
<string name="hello_world">Hola Mundo!</string>
</resources>
French,”values-fr/strings.xml”
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mon Application</string>
<string name="hello_world">Bonjour le monde !</string>
</resources>
使用字符串资源
你可以在代码中使用任何标签为”<string>”的字符串资源。
在代码中,你需要通过”R.string.<string_name>”的方式来访问程序的字符串子语言,通过这种方法可以访问你应用的所有字符串资源。
比如:
// Get a string resource from your app's Resources
String hello = getResources().getString(R.string.hello_world);
// Or supply a string resource to a method that requires a string
TextView textView = new TextView(this);
textView.setText(R.string.hello_world);
在xml文件中,你可以通过”@string/<string_name>”来访问应用的字符串资源,比如:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
支持多屏幕
Android根据大小和分辨率来对屏幕进行分类,如果你希望你的程序安装到不同屏幕大小和分辨率都很合适,你就得通过设置程序的一些资源来兼容不同屏幕的大小和分辨率。
1、为程序配置四种大小的图片:小屏幕设备、普通屏幕设备、大屏幕设备和超大屏幕设备。
2、同时也需要考虑四种分辨率的情况:低分辨率、普通分辨率、高分辨率和超高分辨率。
为了能够保证你的应用被安装到不同设备能够加载对应的布局和图片资源,你必须将每个分辨率对应的资源分开,就和你处理程序支持多语种的情况一样。
同时你也需要考虑在不同设备之间应用的横竖屏切换,多数设备在横竖屏切换时布局都会有所变化。
创建不同的布局
为了提升你程序在不同屏幕大小中使用的用户体验,你需要为你应用所支持的每个屏幕大小都要配备一套布局文件,他们都是放在res文件夹下并且按照”layout-<screen size>”来命名。
注意:android会根据屏幕分辨率来自动缩放你的程序界面。
你可以参照下图来对你的应用的布局命名:
名字必须和上图中要一模一样,但是具体内容你是可以自由发挥的。
在代码中调用布局文件都是一摸一样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
系统会根据你应用所运行的设备来加载对应屏幕大小的布局文件。
下图介绍的是通常情况下应用针对横竖屏的布局:
默认情况下,layout文件夹下的是竖向布局:
如果你想让你的程序在不同屏幕大小的设备中用户体验更好一点,你可以这样做:
创建不同的图片
你应该为不同分辨率的设备提供不同的图片资源,这将有助于你应用在不同设备中的整体交互的美观。
为此,你应该在如下四种drawable文件夹下提供不同分辨率的图片来满足上面的需求:
xhdpi:相比于正常分辨率缩放2倍;
hdpi:相比于正常分辨率缩放1.5倍;
mdpi:正常分辨率;
ldpi:相比于正常分辨率缩放0.75倍。
也就是说当你的提供了一个100*100的图片时,你应该提供一个200*200的图片来适配超高分辨率,提供一张150*150的图片来适配高分辨率,提供一张75*75的图片来适配低分辨率。
为满足上面需求,你应该在工程目录下建立这样一组目录树:
为应用配置好图片后,你就可以在xml文件中通过”@drawable/awesomeimage”来访问这些图片资源了。
注意:低分辨率的资源并不是必须的,当你没有提供低分辨率的图片时,系统会将高分辨率的图片进行压缩来满足条件。
支持不同的SDK版本
Android最新的api会提供最多的功能,但是为了让你的应用支持更多的设备,你需要兼容老版本的设备,本课将告诉你在你的应用中使用最新的api版本但仍能够支持老版本的设备。
Android为了能够让其支持更多地设备,它会频繁地更新SDK版本。所以要想让你的应用能够被更多人使用,你应该使用最新版本的api来支持超过90%的android设备。
为应用指定最小和目标API版本
在工程根目录下的清单文件AndroidManifest.xml中对你应用所支持的API版本定义。具体可参照如下配置:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
...
</manifest>
为了让你的应用能够达到最好的用户体验,一旦android的API版本有更新,你就应该将android:targetSdkVersion就该为最新版本。
在程序运行时检查系统的API版本
Android为每个API版本都在Build类中提供了一个独一无二的常量值,你可以通过这些独一无二的常量在代码中来对系统的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);
}
}
使用平台的风格和主题
你可以通过在清单文件中调用android平台的不同风格来提升你应用的用户体验,通过使用风格和主题,你的应用将紧跟潮流。
将你的窗口设置为对话框形式:
<activity android:theme="@android:style/Theme.Dialog">
将你的窗口背景设置被透明:
<activity android:theme="@android:style/Theme.Translucent">
你还可以在”res/values/styles.xml”中自定义主题:
<activity android:theme="@style/CustomTheme">
你可以通过在<application>标签中加入主题属性来统一真个应用的风格:
<application android:theme="@style/CustomTheme">
原文链接:Supporting Different Devices