- Android开发权威指南(第二版)
- 李宁编著
- 499字
- 2024-12-21 14:46:07
10.1 创建资源
任何一个Android应用都需要大量的资源,而使用资源的第一步就是创建资源文件。在较低版本的ADT中只能通过手工创建和导入资源,不过新版的ADT增加了一些模板,可以更方便地创建大多数资源文件。本节将会详细介绍如何使用传统的手工方式和最新的模板方式创建资源文件。
10.1.1 手工创建资源文件
大多数资源文件都存放在res的相应子目录中,还有一些资源文件存放在assets目录中。在res目录中可能会有很多资源目录,图10-1就是一个典型的资源目录结构,其中包括了图像资源(res/drawable)、布局资源(res/layout)和值资源(res/values)。
▲图10-1 资源目录结构
如果要创建新的XML格式的资源文件,可以在相应资源目录的右键菜单中单击“New”>“File”菜单项新建一个空的文本文件,文件扩展名应为“xml”,例如,“main.xml”。当然,如果有现成的资源文件(包括XML格式的资源文件、图像资源位文件、音频资源文件等),也可以将该资源文件复制到相应的资源目录中。Eclipse可以共享剪贴板的数据。不管是新建的资源文件,还是通过剪贴板导入的资源文件,如果该资源文件是XML格式的,并且资源文件中包含中文或其他双字节文字,需要通过文件属性对话框(选中资源文件,单击右键菜单的“Properties”菜单项)设置该资源文件的编码,例如,图10-2将文件编码设为UTF-8。
▲图10-2 设置文件编码
扩展学习:res与assets资源的区别
Android应用可以将资源存储在两个目录:res和assets。其中res目录中的资源只能存储在相应的子目录(如res/layout、res/values等)中,不能直接将资源存储在res目录中。assets目录中的资源可以任意存放,也可以建立任意层次的子目录。res和assets资源的主要区别如下。
1.引用资源的方式不同
res目录中的所有资源都会在R类的相应子类中生成对应的int类型变量,需要使用这些变量来引用资源。例如res/layout/main.xml是布局文件资源,会在R.layout类中生成一个名为main的变量,所以需要使用R.layout.main来引用main.xml。
assets目录中的资源需要直接使用文件名来引用,例如assets/xyz.xml、assets/abc/test.db是assets目录中的两个资源文件,其中abc是assets中的子目录。可以使用如下的代码引用这两个资源文件,并返回与资源文件对应的InputStream对象,剩下的操作就是普通的Java输入流操作了。
InputStream is1 = getResources().getAssets().open("xyz.xml");
InputStream is2 = getResources().getAssets().open("abc/test.db");
2.处理方式不同
res目录中的资源子目录除了raw外,其他资源目录中的资源文件都会被编译,这也是为什么将APK文件解压后无法直接查看XML格式资源文件内容的原因。而assets与res/raw目录中的资源文件不会做任何处理,所以将APK文件解压后,这两个目录中的资源文件都会保持原样。
3.子目录不同
res目录只能有一层子目录,而且这些子目录必须是预定义的,如res/layout、res/values等都是合法的,而res/abc、res/xyz并不是合法的资源目录,在assets目录中可以建任意层次的子目录(只受操作系统的限制)。
10.1.2 用ADT模板创建本地化图标资源
最新版的ADT大大增强了模板的功能,例如,建立本地化图标就是新增功能之一。在使用ADT创建一个新的Android工程时,会在res目录生成4个用于本地化的图像资源目录,并且在每一个资源目录中都生成了一个同名的ic_launcher.png文件,如图10-3所示。该图像文件将被用于APK程序的图标。而这4个ic_launcher.png文件的分辨率不同,分别适用于低分辨率(ldpi)、中分辨率(mdpi)、高分辨率(hdpi)和扩展分辨率(xhdpi)。系统会根据程序当前运行的设备自动选择其中的一个图像文件。关于资源本地化的细节会在第12章详细介绍,在本节并不需要过多地了解本地化的细节,只要知道为了适应不同的屏幕分辨率,需要4个不同分辨率的图像文件即可。
▲图10-3 用于程序图标的图像资源
虽然可以自己准备这4个不同分辨率的图像文件,但使用ADT模板自动生成不同分辨率的图像文件会更方便。
读者可以选择Android工程的任何位置,单击右键菜单的“New”>“Other”打开“New”对话框,选择“Android”>“Android Icon Set”节点,单击“Next”按钮,进入下一个设置页,如图10-4所示。通过“Android Icon Set”可以创建多种图像资源,本节只介绍创建程序图标资源,其他类型的资源可以通过图10-4所示界面上方的选项进行选择,操作方法与程序图标资源类似。
程序图标资源的默认文件名为ic_launcher,一般并不需要修改这个文件名,因为AndroidManifest.xml文件中使用的就是这个资源名,如果修改了ic_launcher,生成的图像资源名也会改变,但相应的引用不会改变,所以尽量不要修改这个默认名称。
▲图10-4 建立图标资源
单击“Next”按钮进入下一个设置页,在该设置页允许通过3种方式设置图像资源:Image(选择任意的图像)、Clipart(艺术字符)和Text(在图像上显示字符串)。除了这些功能外,还可以选择生成圆形背景、正方形背景和无背景样式的外观;可以设置前景和背景色。图10-5是任意选择一个图像文件的效果(无背景色),图10-6是选择一个艺术字符,并且背景为圆形的效果。图10-7是艺术字符列表,图10-8是在正方形背景上输出了字符串“XYZ”的效果。设置完后,单击“Finish”按钮即可在相应的本地化图像资源目录中生成图像资源文件。
▲图10-5 选择任意图像,无背景图像资源
▲图10-6 选择艺术字符,圆形背景图像资源
▲图10-7 艺术字符列表
▲图10-8 在正方形上输出“XYZ”字符串的图像资源
10.1.3 用ADT模板创建XML文件资源
除了二进制资源外(图像、音频、exe、docx等文件),XML格式的资源也是Android资源系统的重要组成部分。XML格式的资源主要包括布局资源(res/layout)、菜单资源(res/layout)、动画资源(res/anim)、值资源(res/values)等。这些资源的大多数也可以使用ADT模板创建。
读者可以选择Android工程的任何位置,单击右键菜单的“New”>“Other”打开“New”对话框,选择“Android”>“Android XML File”节点,单击“Next”按钮会进入如图10-9所示的设置页。该设置页中设置项的含义如下。
Resources Type:选择要创建的资源类型,这里选择Layout。
Project:选择将资源文件放到哪个Android工程中,默认为当前选择的Android工程(这里是test)。
File:指定资源文件名称,如果Project指定的工程中包含同名的资源文件,系统会覆盖旧的资源文件。
Root Element:对于Layout资源,这一项是Root Element,表示Layout资源文件的根元素(节点)。如果选择其他资源,该项会随着资源类型变化而变化。
单击“Next”按钮进入下一个设置页,如图10-10所示,该页可以设置资源的本地化信息。例如,本例设置了语言(zh)和屏幕密度(High Density),在界面的下方会显示资源文件将要存放的资源目录,如果不修改该目录名,单击“Finish”按钮后,资源文件将存放在/res/layout-zh-hdpi目录中。
▲图10-9 选择资源类型
▲图10-10 设置与资源相关的本地化信息