[Android5 系列—] 3. 支持不同的设备

标签: android
729人阅读 评论(0) 收藏 举报
分类:

安卓的设备,来自全球,形状和大小各异, 也正因为这些不同的设备,您的应用就有机会被广大的用户使用。为了尽可能的在安卓上成功,您的应用就需要适用于各种不同的设备配置,包括不同的语言,屏幕大小和不同版本的安卓平台。

支持不同的语言

从您的应用中提取页面的字串显示,保存到一个外部的文件中是一个好的作法。在安卓工程中使用不同的资源文件路径很容易就可以达成了。
当使用安卓SDK 工具创建项目时,这个工具会在项目的路径中创建 res/ 文件夹,这个文件夹下面就可以放不同类型的资源文件。这个路径下也有一些默认的文件,像 res/values/strings.xml.

创建本地化目录和字符串文件

为了添加更多语言的支持,在res/目录下另外新增一个 类似values 的目录,这个目录的名字是 values+连接符+语言简写。类似:
这里写图片描述
不同语言的文件中使用不同的字符,类似:
英文的: /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-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>

使用字符串资源

在代码中,也可以使用资源名字获取相应的字符串的值。
在Java 代码中使用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 中,

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

支持不同的屏幕

安卓使用两个主要的属性来分类设备的屏幕: 尺寸和分辨率。您应该预料到您的应用将会被安装的设别的大小和分辨率的区间。因此, 您可以导入一些替代性资源来优化你的应用的显示来适应不同的屏幕大小和分辨率。

  • 有四种广义上的尺寸: 小, 一般, 大, 超大
  • 有四种广义上的密度: 低(ldpi), 中等(mdpi), 高(hdpi), 超高(xhdpi)

定义不同的布局和位图来使用不同的屏幕,和语言设置类似,同样要把这些替换的资源放在分开的目录中。

创建不同的布局

同样在 res/ 目录下, 以-为后缀名。
这里写图片描述

在java 代码中的使用方式, 类似 :

@Override
 protected void onCreate(Bundle savedInstanceState) {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
}

默认状况下, layout/main.xml 使用的是纵向的布局。

创建不同的位图

提供不同的位图资源来使用不同的密度。
为了产生这些图片,你应该从你的矢量格式的原始资源,并生成使用以下规模的增加每个密度图像
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (baseline)
- ldpi: 0.75
然后, 把这些文件放在drawable 的资源路径下, 类似:
这里写图片描述

支持不同的平台版本

最新版本的安卓提供最大集的API, 但是您需要继续支持旧版。

指定最小和目标的API

方法就是在 AndroidManifest.xml 文件中设置 minSdkVersion 和 targetSdkVersion属性。
类似:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

查看系统运行的版本

安卓中使用 Build 的常量类来给不同版本的平台定义一个编码。 类似代码:

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

使用平台的样式和主题

对话框效果的活动

<activity android:theme="@android:style/Theme.Dialog">

透明背景效果的活动

<activity android:theme="@android:style/Theme.Translucent">

使用自己定义在 /res/values/styles.xml: 中的主题

<activity android:theme="@style/CustomTheme">

使主题应用于整个应用, 在 中添加android:theme

<application android:theme="@style/CustomTheme">
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:3289092次
    • 积分:24354
    • 等级:
    • 排名:第254名
    • 原创:446篇
    • 转载:68篇
    • 译文:3篇
    • 评论:307条
    博客专栏
    Ext JS

    文章:43篇

    阅读:199337
    PLM

    文章:28篇

    阅读:49468
    Web Chart

    文章:15篇

    阅读:51930
    最新评论