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/中单独版本的文件)。

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

大数据课程培训大纲及详细说明(全)

一、大数据处理技术-基于Hadoop/Yarn的实战(含Spark、Storm和Docker应用介绍 ) 本课程从大数据技术以及Hadoop/Yarn实战的角度,结合理论和实践,全方位地介绍Ha...
  • shenmanli
  • shenmanli
  • 2017年04月19日 10:27
  • 2436

Android培训Android课堂重点内容汇总

Android培训Android课堂重点内容汇总 一、Android Introduction Android 是一个允许你在java环境下为手机设备开发应用和游戏的提供丰富应用框架。 二、四大...
  • Dnnis
  • Dnnis
  • 2016年06月06日 14:43
  • 5470

2天CMMI实践培训后,我收获了什么?

2天CMMI实践培训后,我收获了什么? 最近参加了公司的一次培训,培训导师是宋世杰宋老师,之前我从朋友那里了解,宋老师会在课程中要学员提供很多具体文档,所以事先需要准备好。这让我...
  • u011250455
  • u011250455
  • 2016年12月16日 15:37
  • 1385

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

主要包括: 保存到Preferences,使用Shared Preferences文件以Key-Value的方式保存简要的信息。 保存到文件,保存基本的文件。...
  • baidu_32237719
  • baidu_32237719
  • 2016年09月06日 22:02
  • 115

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

Android官方培训课程学习第二部分,主要包括: activity的生命周期 销毁Activity 保存Activity状态 恢复Activity状态...
  • baidu_32237719
  • baidu_32237719
  • 2016年08月30日 14:24
  • 187

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

主要包括: fragment的基本用法,在activity运行时添加fragment,替换Fragment fragments之间的数据交互,fragment与activity之间的数据交互...
  • baidu_32237719
  • baidu_32237719
  • 2016年09月06日 21:06
  • 208

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

原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/platforms.html每当APP使用了Android所...
  • u011064099
  • u011064099
  • 2016年03月24日 16:01
  • 858

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

原文地址 : http://android.xsoftlab.net/training/basics/supporting-devices/index.html支持不同的设备在世界上,Android设...
  • u011064099
  • u011064099
  • 2016年03月23日 18:39
  • 825

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

给其他App发送简单的数据分享文本内容(Send Text Content)ACTION_SEND最直接常用的地方是从一个Activity发送文本内容到另外一个Activity。intent调用了In...
  • baidu_32237719
  • baidu_32237719
  • 2016年10月08日 14:42
  • 264

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

设备兼容性、设备特性、平台版本、屏幕配置
  • CodeCoderLee
  • CodeCoderLee
  • 2015年10月13日 22:19
  • 355
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android官方培训课程学习(一): 兼容不同设备
举报原因:
原因补充:

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