Android官方开发教程中文版
支持不同设备
支持不同设备
Android设备来自世界各地,有不同形状和尺寸。通过广泛的设备类型,你的应用有机会影响到庞大的受众。为了在Android系统中尽可能地成功,你的应用需要适用各种设备配置。你应该考虑包括不同语言、屏幕尺寸以及不同版本的Android平台的某些重要的变化。
本课程教你如何用一个程序包,使用基本的平台特性,利用可替换资源和其它特性,在多种Android兼容设备上优化用户体验。
支持不同语言
从你的App代码中,把界面的字符串提取出来放在外部文件中总是一个好习惯。在Android项目中使用资源目录使这一切变得很容易。
如果你使用Android SDK工具创建项目(参见“创建Android项目”),它会在项目根目录下创
建一个res/目录,res/目录下包括多种资源类型的子目录。这里会有几个默认文件,比如res/l就保存了你的字符串值。
创建本地化目录和字符串文件
要支持更多的语言,在res/目录下创建一个额外的values目录,并在目录名称的末尾包含连字符和标准国家代码。例如,values-es/目录包含了为语言代码“es”本地化的简单资源。Android系统会根据设备运行时的区域设置加载适当的资源。
一旦你决定了要支持哪些语言,创建相应的资源子目录和字符串文件,例如:
MyProject/
    res/
      values/
          l
      values-es/
          l
      values-fr/
          l
在对应的文件中添加本地化字符串。
运行时,Android系统会基于用户设备上的区域设置使用对应的字符串集。
例如,下面针对不同语言的字符串资源文件。
英语(默认区域),/l
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">My Application</string>
    <string name="hello_world">Hello World!</string>
</resources>
西班牙语,/l
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mi Aplicación</string>
    <string name="hello_world">Hola Mundo!</string>
</resources>
法语,/l
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="title">Mon Application</string>
    <string name="hello_world">Bonjour le monde !</string>
</resources>
注意:你可以对任何资源类型使用区域限定符(或任何配置限定符),比如你想为你的位图资源提供一个本地化版本。参见“本地化”
使用字符串资源
你可以在源代码和其它XML文件中使用<string>元素的name属性定义的资源名称引用字符串资源。
在源代码中,你可以使用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文件中,当一个XML属性要接收一个字符串值时,你可以用@string/<string_name>的方式引用字符串资源。
例:
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />
支持不同屏幕
Android使用两个通用属性:大小和密度对屏幕进行分类。你应该预计到你的App将被安装到的设备屏幕的大小和密度范围,同样,你应该提供某些可替换资源来优化你的App以适应不同的屏幕大小和密度。
四种通用尺寸:小,正常,大,超大。
以及四种通用密度:低(ldpi),中等(mdpi),高(hdpi),超高(xhdpi)
为你要使用的不同的屏幕定义不同的布局和位图,你必须把这些可替换资源放到独立的目录中,就像你使用不同语言的字符串一样。
还要注意屏幕的方向(水平或垂直)也是一种屏幕大小的变化,很多App都会根据屏幕方向修改布局以优化用户体验。
创建不同布局
要为不同的屏幕大小优化用户体验,你应该为每一个你要支持的屏幕尺寸创建唯一的布局XML文件。每个布局文件都要保存到对应的资源目录中,用带-<screen_size>后缀的方式为目录命名。比如,为大(large)屏幕创建的唯一布局文件保存到res/layout-large/目录下。
注意:Android会自动缩放你的布局以正确地适应屏幕。因此,你的布局无需为不同屏幕尺寸而担心UI元素的绝对大小,而应该把精力集中在影响用户体验的布局结构上(例如重要视图相对于同级视图的大小和位置)。
例如,本项目包括一个默认布局和一个用于大(large)屏幕的可替换布局。
MyProject/
    res/
        layout/
            l
        layout-large/
            l
文件名必须完全相同,但内容是不同的,以便为不同屏幕尺寸提供最佳UI。
在你的App中像平常一样简单地引用布局文件:
@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}
系统会基于运行你的App的设备屏幕大小,从对应的布局目录中加载布局文件。有关Android如何选择正确的资源,请参看“提供资源”指南。
在另一个例子中,该项目为横向屏幕提供了一个可替换资源。
MyProject/
    res/
        layout/
            l
        layout-land/
            l
默认情况下,l文件用于垂直屏幕。
如果你想为一个大屏幕提供横向布局,你需要使用large和land修饰符。
MyProject/
    res/
        layout/              # default (portrait)
            l
        layout-land/        # landscape
            l
        layout-large/        # large (portrait)
            l
        layout-large-land/  # large landscape
            l
Android3.2及以上版本支持一种更先进的定义屏幕尺寸的方法,允许你基于与密度无关的最小宽度和高度指定资源。本课程不涉及这种新技术,参考“多屏幕设计”获得更多信息。
创建不同位图
你应该提供可以为每种密度正确缩放的位图资源:低,中等,高及超高。这可以帮助你在所有屏幕密度下获得较好的图形质量和性能。
要生成这些图片,你应该使用矢量格式的原始资源,并按以下比例为每种密度生成图形:
xhdpi:2.0
hdpi:1.5
mdpi:1.0(基线)
ldpi:0.75
这意味着如果你为xhdpi设备生成了一张200x200的图片,那么你要为hdpi设备生成150x150,为mdpi设备生成100x100,为ldpi设备生成75x75的相同资源。
然后,把这些文件放到对应的可绘制资源目录中。
MyProject/
    res/
        drawable-xhdpi/
            awesomeimage.png
        drawable-hdpi/
            awesomeimage.png
        drawable-mdpi/
            awesomeimage.png
        drawable-ldpi/
            awesomeimage.png
当你引用@drawable/awesomeimage时,系统会基于屏幕密度选择对应的位图。
注意:低密度(ldpi)资源并不是必需的,当你提供了hdpi资源,系统会把它缩小一半来适应ldpi屏幕。
要获得更多创建图标资源的技巧和指引,请参考“图像设计指南”。
支持不同平台版本
虽然Android最新版本通常会为你的App提供更好的API,但你应该继续支持旧版本直到更多设备得到更新。本课程向你展示了如何应用最新API,同时继续支持旧版本。
本站“平台版本”链接下的仪表板定期更新以显示运行于活跃设备上的每个Android版本的分布情况,这个数据基于访问Google Play Store的设备数量。通常情况下,这是一个不错的做法,支持大约90%的活跃设备,把最新版本做为你的App的目标。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。