Android官方培训课程学习(一): 兼容不同设备

原创 2016年08月30日 13:38:00

Android官方培训课程学习第一部分,主要包括:
1. 使用字符资源
2. 创建区域设置目录及字符串文件
3. 适配不同的屏幕
4. 运行时检查系统版本

使用字符资源
我们可以在源代码和其他XML文件中通过元素的name属性来引用自己的字符串资源。

在源代码中可以通过R.string.语法来引用一个字符串资源,很多方法都可以通过这种方式来接收字符串。
例如:

//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/语法来引用字符串资源。
例如:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world" />

创建区域设置目录及字符串文件

为支持多国语言,在res/中创建一个额外的values目录,以连字符和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>

适配不同的屏幕

  • 有4种普遍尺寸:小(small),普通(normal),大(large),超大(xlarge)
  • 4种普遍分辨率:低精度(ldpi), 中精度(mdpi), 高精度(hdpi), 超高精度(xhdpi)

为了针对不同的屏幕去优化用户体验,我们需要为每一种将要支持的屏幕尺寸创建唯一的XML文件。每一种layout需要保存在相应的资源目录中,目录以-为后缀命名。
例如,对大尺寸屏幕(large screens),一个唯一的layout文件应该保存在res/layout-large/中。

MyProject/
    res/
        layout/
            main.xml
        layout-large/
            main.xml

layout文件的名字必须完全一样,为了对相应的屏幕尺寸提供最优的UI,文件的内容不同。

系统会根据app所运行的设备屏幕尺寸,在与之对应的layout目录中加载layout。

另一个例子,这一个工程中有为适配横向屏幕的layout:

MyProject/
    res/
        layout/
            main.xml
        layout-land/
            main.xml

默认的,layout/main.xml文件用作竖屏的layout。

如果想给横屏提供一个特殊的layout,也适配于大屏幕,那么则需要使用large和land修饰符。

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

我们应该为4种普遍分辨率:低,中,高,超高精度,都提供相适配的bitmap资源。

  • xhdpi: 2.0
  • hdpi: 1.5
  • mdpi: 1.0 (基准)
  • ldpi: 0.75

如果针对xhdpi的设备生成了一张200x200的图像,那么应该为hdpi生成150x150,为mdpi生成100x100, 和为ldpi生成75x75的图片资源。

运行时检查系统版本

Android在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);
    }
}

Note:当解析XML资源时,Android会忽略当前设备不支持的XML属性。所以我们可以安全地使用较新版本的XML属性,而不需要担心旧版本Android遇到这些代码时会崩溃。例如如果我们设置targetSdkVersion="11",app会在Android 3.0或更高时默认包含ActionBar。然后添加menu items到action bar时,我们需要在自己的menu XML资源中设置android:showAsAction="ifRoom"。在跨版本的XML文件中这么做是安全的,因为旧版本的Android会简单地忽略showAsAction属性(就是这样,你并不需要用到res/menu-v11/中单独版本的文件)。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android官方培训课程学习(三): 使用Fragment建立动态UI

主要包括: fragment的基本用法,在activity运行时添加fragment,替换Fragment fragments之间的数据交互,fragment与activity之间的数据交互...

Android官方培训课程学习(二): 管理activity的生命周期

Android官方培训课程学习第二部分,主要包括: activity的生命周期 销毁Activity 保存Activity状态 恢复Activity状态...

Android官方培训课程学习(四): 数据存储

主要包括: 保存到Preferences,使用Shared Preferences文件以Key-Value的方式保存简要的信息。 保存到文件,保存基本的文件。...

Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的语言

原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/index.html支持不同的设备在世界上,Android设...

Android官方开发文档Training系列课程中文版:支持不同的设备之支持不同的平台版本

原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/platforms.html每当APP使用了Android所...

Android官方培训课程学习(六): Android分享简单数据

给其他App发送简单的数据分享文本内容(Send Text Content)ACTION_SEND最直接常用的地方是从一个Activity发送文本内容到另外一个Activity。intent调用了In...

Android官方API Guide学习之二 设备兼容性

设备兼容性、设备特性、平台版本、屏幕配置

Android官方培训课程中文版(v0.9.3)

Android官方培训课程中文版(v0.9.3)这是一份开源的翻译系列文章:原文在此该网站的文章是学习android开发的很好的系列文章,值得推荐!课程结构 序言 Android入门基础:从这里开始 ...
  • DevWiki
  • DevWiki
  • 2015年06月09日 21:09
  • 525

管理照相机-控制相机硬件(摘自Android官方培训课程中文版(v0.9.5))

控制相机 编写:kesenhoo - :http://developer.android.com/training/camera/cameradirect.html 在这一节课,我们会讨论如何通过...

管理音频播放(摘自Android官方培训课程中文版(v0.9.5))

编写:kesenhoo - 原文:http://developer.android.com/training/managing-audio/index.html 如果我们的应用能够播放音频,那么让用...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android官方培训课程学习(一): 兼容不同设备
举报原因:
原因补充:

(最多只允许输入30个字)