Android(安卓)资源的组织和访问
您还可以使用许多其他项来构建良好的 Android 应用程序。除了为应用程序编码之外,您还需要处理各种其他资源,例如代码使用的静态内容,例如位图,颜色,布局定义,用户界面字符串,动画指令等。这些资源始终在项目的 res/ 目录下的各个子目录中分别维护。
本教程将向您说明如何组织应用程序资源,指定替代资源并在应用程序中访问它们。
在 Android Studio 中组织资源
| 编号 | 目录 & 资源类型 |
|---|---|
| 1 | anim/ 定义属性动画的 XML 文件它们保存在 res/anim/ 文件夹中,并从 |
| 2 | color/ 定义颜色状态列表的 XML 文件它们保存在 res/color/ 中,并从 |
| 3 | drawable/ 图像文件,如 .png、.jpg、.gif 或 XML 文件,编译为位图、状态列表、形状和可绘制的动画它们保存在 res/drawable/ 中,并从 |
| 4 | layout/ 定义用户界面布局的 XML 文件它们保存在 res/layout/ 中,并从 |
| 5 | menu/ 定义应用程序菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件它们保存在 res/menu/ 中,并从 |
| 6 | raw/ 以原始形式保存的任意文件您需要调用 |
| 7 | values/ 包含简单值(如字符串、整数和颜色)的 XML 文件例如,以下是您可以在此目录中创建的资源的一些文件名约定:
|
| 8 | xml/ 可以在运行时通过调用 |
替代资源
您的应用程序应提供替代资源以支持特定的设备配置。例如,您应该包括用于不同屏幕分辨率的可选可绘制资源(即图像)和用于不同语言的可选字符串资源。在运行时,Android 会检测当前设备配置并为应用程序加载适当的资源。
要为一组资源指定特定于配置的备选方案,请执行以下步骤:
- 在res/中以
<resources_name>-<config_qualifier>的形式创建一个新目录。这里的resources_name是上表中提到的任何资源,如布局、可绘制等。限定符将指定要使用这些资源的单个配置。您可以查看官方文档,了解不同类型资源的完整限定符列表。 - 将各自的替代资源保存在此新目录中。资源文件的名称必须与下面的示例中显示的默认资源文件完全相同,但这些文件将具有特定于备选方案的内容。例如,虽然图像文件名相同,但对于高分辨率屏幕,其分辨率将很高。
下面是一个实例,它为默认屏幕指定图像,为高分辨率屏幕指定替代图像。
MyProject/app/manifest/AndroidManifest.xmljava/MyActivity.javares/drawable/icon.pngbackground.pngdrawable-hdpi/icon.pngbackground.pnglayout/activity_main.xmlinfo.xmlvalues/strings.xml
下面是另一个实例,该实例指定默认语言的布局和阿拉伯语的替代布局。
MyProject/app/manifest/AndroidManifest.xmljava/MyActivity.javares/drawable/icon.pngbackground.pngdrawable-hdpi/icon.pngbackground.pnglayout/activity_main.xmlinfo.xmllayout-ar/main.xmlvalues/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);
实例
考虑具有以下定义的 layoutres/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! ,相信您会更好地理解本章中解释的所有概念。所以,强烈建议查看上一章的工作实例,并查看如何在非常基本的级别使用各种资源。