Android设备在世界各地有许多形状和尺寸。有了大量的设备型号,你就有机会用你的app吸引大量的用户。为了在Android应用中尽可能的成功,你的app需要适配不同的设备配置。你应该想到或者看到一些重要的变化包括不同的语言、屏幕尺寸以及Andorid系统的不同版本。
下面将说明怎么使用基本的平台特性,利用可替代资源和其他功能,app就可以通过一个apk安装包为各种各样的安卓设备提供一个优质的用户体验。
支持不同的语言和文化
学习如何通过使用可替代资源支持多个语言和文化
在任何情况下,从您的应用代码中提取UI字符串并将其存放在外部文件中都是个好办法。Android在每个Andorid项目中都提供一个资源目录,从而简化了这一过程。
如果是使用Andorid SDK工具创建的项目,工具会在项目的顶层创建一个res/目录。此res/目录中包含用于存放各类资源的子目录。此外,还包含几个默认文件(如res/values/string.xml),用于存放字符串值。
如需添加对更多语言的支持,需要新建目录,并在目录名称末尾加上连字符和ISO语言代码。如,values-es/目录包含的简单资源用于语言代码为“es”的语言区域。Android根据运行时设备的语言区域设置加载相应的资源。
一旦决定了为那些语言提供支持,便可创建资源子目录和字符串资源文件。例如:
MyProject/ res/ values/ strings.xml values-es/ strings.xml values-fr/ strings.xml
将各个语言区域的字符串值添加到相应的文件中。
在运行时,Android系统会根据当前为用户设备设置的语言区域使用相应的字符串资源急
例如,以下是一些面向不同语言的不同字符串资源文件。
英语(默认语言区域),/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>
西班牙语,/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>
法语,/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>
元素的 name
属性定义的资源名称在您的源代码和其他 XML 文件中引用您的字符串资源。
在您的源代码中,可以使用语法 R.string.<string_name>
引用字符串资源。有许多方法都接受以这种方式引用的字符串资源。
例如:
// Get a string resource from your app'sResources
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 文件中,只要 XML 属性接受字符串值,您就可以使用语法 @string/<string_name>
引用字符串资源。
例如:
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" />