声明:本文摘自 Google Android 开发者平台提供的官方文档 Android应用资源概览。
资源是指代码使用的附加文件和静态内容,例如位图、布局定义、界面字符串、动画说明等。
- 资源类型
目录 | 资源类型 |
---|---|
animator/ |
用于定义属性动画的 XML 文件。 |
anim/ |
用于定义渐变动画的 XML 文件。(属性动画也可保存在此目录中,但为了区分这两种类型,属性动画首选 animator/ 目录。) |
color/ |
用于定义颜色状态列表的 XML 文件。请参阅颜色状态列表资源 |
drawable/ |
位图文件(
请参阅 Drawable 资源。 |
mipmap/ |
适用于不同启动器图标密度的可绘制对象文件。如需了解有关使用 mipmap/ 文件夹管理启动器图标的详细信息,请参阅管理项目概览。 |
layout/ |
用于定义用户界面布局的 XML 文件。请参阅布局资源。 |
menu/ |
用于定义应用菜单(如选项菜单、上下文菜单或子菜单)的 XML 文件。请参阅菜单资源。 |
raw/ |
需以原始形式保存的任意文件。如要使用原始 但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 |
values/ |
包含字符串、整型数和颜色等简单值的 XML 文件。 其他 由于每个资源均使用自己的 XML 元素进行定义,因此您可以随意命名文件,并在某个文件中放入不同的资源类型。但是,您可能需要将独特的资源类型放在不同的文件中,使其一目了然。例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定: |
xml/ |
可在运行时通过调用 Resources.getXML() 读取的任意 XML 文件。各种 XML 配置文件(如可搜索配置)都必须保存在此处。 |
font/ |
带有扩展名的字体文件(如 .ttf 、.otf 或 .ttc ),或包含 <font-family> 元素的 XML 文件。如需详细了解作为资源的字体,请参阅 XML 中的字体。 |
- 创建资源
例如创建字符串资源和颜色资源,可以在一个XML文件的 <resource></resource>中定义:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="hi">@string/hello</string> <color name="red">#f00</color> <color name="hightlight">@color/red</color> </resources>
可以为资源创建别名。上面资源 hi 就是 hello 的别名,highlight 是 red 的别名。
不同资源一般分开定义。可以创建一个strings.xml 和 colors.xml文件分别保存字符串和颜色这两种资源。
strings.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="hi">@string/hello</string> </resources>
colors.xml:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="red">#f00</color> <color name="highlight">@color/red</color> </resources>
- 访问应用资源
可通过引用其资源 ID 来应用该资源。所有资源 ID 都在项目的 R
类中进行定义,该类由 aapt
工具自动生成。
访问资源的方法有两种:在代码中访问和在其他XML文件中访问。
在代码中访问资源语法
[<package_name>.]R.<resource_type>.<resource_name>
<package_name>
是资源所在包的名称(如果引用的资源来自您自己的资源包,则不需要)。<resource_type>
是资源类型的R
子类。<resource_name>
是不带扩展名的资源文件名,或 XML 元素中的android:name
属性值(若资源是简单值)。
例如对于字符串资源 hello,使用 R.string.hello 访问。
常见代码中访问资源用法:
// Load a background for the current screen from a drawable resource getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ; // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID getWindow().setTitle(getResources().getText(R.string.main_title)); // Load a custom layout for the current screen setContentView(R.layout.main_screen); // Set a slide in animation by getting an Animation from the Resources object flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)); // Set the text on a TextView object using a resource ID TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello_message);
在XML文件中访问资源语法
@[<package_name>:]<resource_type>/<resource_name>
<package_name>
是资源所在包的名称(如果引用的资源来自相同资源包,则不需要)<resource_type>
是资源类型的R
子类<resource_name>
是不带扩展名的资源文件名,或 XML 元素中的android:name
属性值(若资源是简单值)。
例如对于字符串资源 hello,使用 @string/hello 访问。
在布局文件中访问资源用法:
<?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/red" android:text="@string/hello" />
如果要访问系统资源,则要加上包名称:
<?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="@android:color/secondary_text_dark" android:text="@string/hello" />