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 调用Resources.openRawResource(),该资源ID是R.raw.filename以打开此类原始文件。

7

values/

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

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

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

  • bools.xml for resource boolean,可从R.bool访问

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

  • dimens.xml用于维度值,可从R.dimen访问

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

  • styles.xml用于样式,可从R.style访问

8

XML /

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

替代资源

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

要为一组资源指定特定于配置的备选方案,请执行以下步骤 -

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

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

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

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 来获取在布局文件中使用id myimageview 定义的ImageView 。第二行代码使用 R.drawable.myimage/ res 下的drawable子目录中获取名为 myimage 的图像。


考虑下一个示例,其中 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 / activitymain.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! 例如,我相信您将对本章中解释的所有概念有更好的理解。因此,我强烈建议您查看上一章的工作示例,并检查我在非常基本的级别上如何使用各种资源。