📜  Android资源的组织和访问

📅  最后修改于: 2021-01-05 04:50:16             🧑  作者: Mango


您还可以使用许多其他项来构建良好的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 
                 
Sr.No. Directory & Resource Type
1

anim/

XML files that define property animations. They are saved in res/anim/ folder and accessed from the R.anim class.

2

color/

XML files that define a state list of colors. They are saved in res/color/ and accessed from the R.color class.

3

drawable/

Image files like .png, .jpg, .gif or XML files that are compiled into bitmaps, state lists, shapes, animation drawable. They are saved in res/drawable/ and accessed from the R.drawable class.

4

layout/

XML files that define a user interface layout. They are saved in res/layout/ and accessed from the R.layout class.

5

menu/

XML files that define application menus, such as an Options Menu, Context Menu, or Sub Menu. They are saved in res/menu/ and accessed from the R.menu class.

6

raw/

Arbitrary files to save in their raw form. You need to call Resources.openRawResource() with the resource ID, which is R.raw.filename to open such raw files.

7

values/

XML files that contain simple values, such as strings, integers, and colors. For example, here are some filename conventions for resources you can create in this directory −

  • arrays.xml for resource arrays, and accessed from the R.array class.

  • integers.xml for resource integers, and accessed from the R.integer class.

  • bools.xml for resource boolean, and accessed from the R.bool class.

  • colors.xml for color values, and accessed from the R.color class.

  • dimens.xml for dimension values, and accessed from the R.dimen class.

  • strings.xml for string values, and accessed from the R.string class.

  • styles.xml for styles, and accessed from the R.style class.

8

xml/

Arbitrary XML files that can be read at runtime by calling Resources.getXML(). You can save various configuration files here which will be used at run time.

替代资源

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

要为一组资源指定特定于配置的替代方案,请遵循以下步骤:

  • 在res /中创建一个新目录,格式为- 。在这里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来获取名称为myimage的图像,该图像位于/ res下的drawable子目录中。

考虑下一个示例,其中res / values /字符串.xml具有以下定义-



   Hello, World!

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

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

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



   
   

   
      

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

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

访问XML资源

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



   #f00
   Hello!

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



现在,如果您再次浏览上一章,我将向您解释《 Hello World》!例如,我相信您将对本章介绍的所有概念有更好的了解。因此,我强烈建议您查看上一章中的工作示例,并从基本的角度检查我如何使用各种资源。