Android 基础知识

Android 主页 Android 概述 Android 下载安装和开发环境配置 Android Studio IDE Android 架构 Android 应用程序组件 Android Hello World 示例 Android 资源 Android 活动 Android 服务 Android 广播接收器 Android 内容提供者 Android 片段 Android Intents/Filters

Android 用户界面

Android UI 布局 Android UI 控件 Android 事件处理 Android 样式和主题 Android 自定义组件

Android 高级概念

Android 拖放 Android 通知 Android 基于位置的服务 Android 发送电子邮件 Android 发送短信 Android 拨打电话 Android 发布应用程序

Android 实用示例

Android 警报对话框 Android 动画 Android 音频捕捉 Android 音频管理器 Android 自动完成 Android 最佳实践 Android 蓝牙 Android 相机 Android 剪贴板 Android 自定义字体 Android 数据备份 Android 开发者工具 Android 模拟器 Android Facebook 集成 Android 手势 Android 谷歌地图 Android 图像效果 Android 图像切换 Android 内部存储 Android JetPlayer Android JSON 解析器 Android Linkedin 集成 Android 旋转加载器 Android 本地化 Android 登录应用 Android 媒体播放器 Android 多点触控 Android 导航 Android 网络连接 Android NFC 指南 Android PHP/MySQL Android 进度圈 Android 进度条 Android 推送通知 Android 渲染脚本 Android RSS 阅读器 Android 屏幕投射 Android SDK 管理器 Android 传感器 Android 会话管理 Android 共享首选项 Android SIP 协议 Android 拼写检查器 Android SQLite 数据库 Android 支持库 Android 测试 Android 文字转语音 Android TextureView Android Twitter 集成 Android UI 设计 Android UI 模式 Android UI 测试 Android WebView 布局 Android Wi-Fi Android Widgets Android XML 解析器

Android 其他

Android 面试问题 Android 有用的资源 Android 测验


Android 资源的组织和访问

您可以使用更多的项目来构建一个好的 Android 应用程序。 除了为应用程序编码之外,您还需要处理各种其他资源,例如您的代码使用的静态内容,例如位图、颜色、布局定义、用户界面字符串、动画说明等。 这些资源总是单独维护在项目res/目录下的各个子目录中。

本教程将向您解释如何组织应用程序资源、指定替代资源并在应用程序中访问它们。


在 Android Studio 中组织资源

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java  
      res/
         drawable/  
            icon.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 
				 

序号 目录 & 资源类型
1

anim/

定义属性动画的 XML 文件。 它们保存在 res/anim/ 文件夹中,可以从 R.anim 类中访问。

2

color/

定义颜色状态列表的 XML 文件。 它们保存在 res/color/ 中并从 R.color 类中访问。

3

drawable/

图像文件,如 .png、.jpg、.gif 或 XML 文件,它们被编译成位图、状态列表、形状、可绘制动画。 它们保存在 res/drawable/ 并从 R.drawable 类访问。

4

layout/

定义用户界面布局的 XML 文件。 它们保存在 res/layout/ 并从 R.layout 类中访问。

5

menu/

定义应用程序菜单的 XML 文件,例如选项菜单、上下文菜单或子菜单。 它们保存在 res/menu/ 并从 R.menu 类访问。

6

raw/

以原始形式保存的任意文件。 您需要使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource() 来打开此类原始文件。

7

values/

包含简单值的 XML 文件,例如字符串、整数和颜色。 例如,以下是您可以在此目录中创建的资源的一些文件名约定 −

  • arrays.xml 用于资源数组,并从 R.array 类访问。

  • integers.xml 用于资源整数,并从 R.integer 类访问。

  • bools.xml 用于资源布尔值,可从 R.bool 类访问。

  • colors.xml 用于颜色值,可从 R.color 类访问。

  • dimens.xml 用于尺寸值,并从 R.dimen 类访问。

  • strings.xml 用于字符串值,并从 R.string 类访问。

  • styles.xml 用于样式,并从 R.style 类访问。

8

xml/

可以通过调用 Resources.getXML() 在运行时读取的任意 XML 文件。 您可以在此处保存将在运行时使用的各种配置文件。


替代资源

您的应用程序应提供替代资源来支持特定的设备配置。 例如,您应该包括用于不同屏幕分辨率的替代可绘制资源(即图像)和用于不同语言的替代字符串资源。 在运行时,Android 会检测当前的设备配置并为您的应用程序加载适当的资源。

要为一组资源指定特定于配置的替代方案,请执行以下步骤 −

  • 在 res/ 中创建一个以 <resources_name>-<config_qualifier> 形式命名的新目录。这里的 resources_name 将是上表中提到的任何资源,如布局、可绘制等。qualifier 将指定要使用这些资源的单个配置。您可以查看官方文档以获取不同类型资源的完整限定符列表。

  • 将相应的替代资源保存在这个新目录中。 资源文件的名称必须与以下示例中所示的默认资源文件完全相同,但这些文件将具有特定于替代方案的内容。 例如,虽然图像文件名相同,但对于高分辨率屏幕,其分辨率会很高。

下面是一个示例,它为默认屏幕指定图像,为高分辨率屏幕指定替代图像。

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         values/  
            strings.xml 

下面是另一个示例,它指定默认语言的布局和阿拉伯语的替代布局。

MyProject/
   app/
      manifest/
         AndroidManifest.xml
   java/
      MyActivity.java   
      res/
         drawable/  
            icon.png
            background.png
         drawable-hdpi/  
            icon.png
            background.png  
         layout/  
            activity_main.xml
            info.xml
         layout-ar/
            main.xml
         values/  
            strings.xml 

访问资源

在您的应用程序开发期间,您将需要访问您的代码或布局 XML 文件中定义的资源。 以下部分说明了如何在这两种情况下访问您的资源 −

在代码中访问资源

当您的 Android 应用程序被编译时,会生成一个 R 类,其中包含您的 res/ 目录中所有可用资源的资源 ID。您可以使用 R 类使用子目录和资源名称或直接资源 ID 访问该资源。

示例

要访问 res/drawable/myimage.png 并设置 ImageView,您将使用以下代码 −

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

这里代码的第一行使用 R.id.myimageview 来获取在 Layout 文件中使用 id myimageview 定义的 ImageView。第二行代码使用 R.drawable.myimage 来获取名称为 myimage 的图像,该图像位于 /res 下的 drawable 子目录中。

示例

考虑下一个示例,其中 res/values/strings.xml 具有以下定义 −

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string  name="hello">Hello, World!</string>
</resources>

现在您可以使用资源 ID 在 ID 为 msg 的 TextView 对象上设置文本,如下所示 −

TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello);

示例

考虑具有以下定义的布局 res/layout/activity_main.xml −

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent" 
   android:layout_height="fill_parent" 
   android:orientation="vertical" >
   
   <TextView android:id="@+id/text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a TextView" />

   <Button android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello, I am a Button" />
      
</LinearLayout>

此应用程序代码将在 onCreate() 方法中为 Activity 加载此布局,如下所示 −

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

在 XML 中访问资源

考虑以下资源 XML res/values/strings.xml 文件,其中包括颜色资源和字符串资源 −

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

现在您可以在以下布局文件中使用这些资源来设置文本颜色和文本字符串,如下所示 −

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:textColor="@color/opaque_red"
   android:text="@string/hello" />

现在,如果您再次阅读上一章,我已经解释了 Hello World! 示例,我相信您会对本章中解释的所有概念有更好的理解。因此,我强烈建议您查看前一章的工作示例,并检查我是如何在非常基础的层面使用各种资源的。