1、 资源包括:文本字符串、图像和图标、音频文件、视频和其他应用程序使用的组件。
2、 在Android工程中,Android资源文件是同Java类文件分开存储的,大多数常见的资源类型存储在XML中。你也可以将原始数据文件和图形作为资源来存储。
3、 Eclipse下默认的Android资源目录
资源子目录 | 说明 |
/res/drawable | 图形资源 |
/res/layout | 用户界面资源,Widget |
/res/values | 简单数据,如字符串、颜色值 |
说明:当你向工程资源目录/res中加入新的资源时,插件将会探测到并自动使用AAPT工具在后台编译这一资源,以便能在应用程序中访问它。
4、 资源文件的类型
资源文件存储在Android工程的/res目录下,并且严格(理由充分时可以更改)存储于各自的子目录和文件中。资源文件的名称必须为小写且要求简单(仅由字母、数字和下划线构成)
资源类型 | 所需目录 | 文件名 | 适合的关键XML元素 |
字符串 | /res/values/ | strings.xml | <string> |
字符串数组 | /res/values/ | arrays.xml | <string-array> |
颜色值 | /res/values/ | colors.xml | <color> |
尺寸 | /res/values/ | dimens.xml | <dimen> |
简单Drawable图形 | /res/values/ | drawables.xml | <drawable> |
位图图像 | /res/drawable/ | 例如:img.png、img.jpg、等 | 支持的图形文件或xml文件定义的drawable图形 |
动画序列(补间) | /res/anim/ | 如:fancy_animl.xml、 more_options.xml | <set><alpha><scale> <translate><rotate> |
菜单文件 | /res/menu/ | 如、my_menu1.xml | <menu> |
XML文件 | /res/xml/ | 如、some.xml | 由开发人员自己定义 |
原始文件 | /res/raw/ | 如、some_audio.mp3 main_video.mp4、some_text.txt |
|
布局文件 | /res/layout/ | 如、start_screen.xml | 多种定义 |
样式和主题 | /res/values/ | styles.xml、themes.xml | <style> |
注意:某些资源文件,如:动画文件和图形,是根据它们自己的文件名来引用的,所以要适当地对它们进行命名。R.drawable.flag
5、 存储不同的资源文件时,需要注意事项:
1> 存储String类型的文件。每一个xml文件都要包含:
<?xml version="1.0" encoding="utf-8"?> <resources> 里面可以是:<string>、<color>等 </resources> |
2> 存储图形、动画、菜单和文件
可以图形、动画、菜单、文件任意的xml文件和原始文件作为资源来存储,这些资源不存储在/res/values/下,而是存储在不同的文件夹下。
6、 引用资源文件
String myString = getResources().getString(R.string.string标签标签name属性的名字); int myColor = getResources().getColor(R.color.color标签name属性的名字); float myDimen = getResources().getDimension(R.dimen.dimen标签name属性的名字); |
1> 使用String(字符串)的资源
在xml文件中使用String资源时,在包含撇号或单引号的字符串需要进行转移或使用双引号括起来。
strings.xml格式如下
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">开始学习Android知识</string> </resources> |
(1)、对于字符串资源,可以加入三种具有HTML风格的属性:<b>、<i>、<u>分别表示加粗、斜线和下划线。
<string name="txt"><b>加粗</b>,<i>斜线</i>、<u>下划线</u></string>
(2)、使用格式化的字符串
创建带有格式化的字符串,但是你需要 加粗、斜体和下划线进行转义。
<string name="winLose">Score:%1$d of %2$d! You %3$d.</string>
<string name="winLoseStyled">Score: %1$d of %2$d ! you &lt;i>%3$s &lt/i>.</string>
引用:
使用下面的格式的格式会将HTML风格属性从字符串中被剔除
String myStrHello = getResources().getString(R.string.txt);
CharSequence myBoldStr = getResources().getText(R.string.hello);
载入一个格式化得字符串(需要确保所有的格式变量都已经被转义):
String resultText = String.format(myStrHello, 5,5,escapeWin);
在Activity中引用字符串数组:
strings.xml文件中的内容:
<string-array name="flavors"> <item>Vanilla</item> <item>Chocolate</item> <item>Strawberry</item> </string-array> |
Activity中的代码:String aFlavors[] = getResources().getStringArray(R.array.flavors);
2> 使用颜色(RGB颜色值)
RGB颜色值始终以”#”开头,另外可以给出alpha控制透明度,
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="text_color">#F00</color> </resources> |
颜色资源事实上是一个整数。
测量单位 | 说明 | 所需的资源标记 | 示例 |
像素 | 实际的屏幕像素 | px | 20px |
英寸 | 物理测量单位 | in | 2in |
毫米 | 物理测量单位 | mm | 2mm |
点 | 普通字体测量单位 | pt | 14pt |
密度独立像素(density-independent pixels) | 相对于160dpi屏幕的像素 | dp | 2dp |
比例独立像素(scale-independent pixels) | 对于字体显示的测量 | sp | 14sp |
注意:英寸是长度单位。1 英寸= 2.539999918 厘米(公分)。
尺寸资源实际上是最简单的浮点值。
float myDimen = getResources().getDimension(R.dimen.dimen标签name属性的名字);
4> 使用简单的Drawable资源
使用Drawable资源类指定一个简单的带颜色矩形。
<?xml version="1.0" encoding="UTF-8"?> <resources> <drawable name="red_rect">#F00</drawable> </resources> |
引用:
ColorDrawable myDraw = (ColorDrawable)getResources().getDrawable(R.drawable.red_rect);
5> 使用图像
支持的图像 | 说明 | 扩展名 |
便携式网络图像 | 推荐的格式(无损) | .png |
9格拉伸图像 | 推荐的格式(无损) | .9.png |
联合图像专家组 | 可接受的格式(有损) | .jpg .jpeg |
图形交换格式 | 不鼓励的格式 | .gif |
(1) 使用9格拉伸图像
手机屏幕拥有各种不同的尺寸,想象一个可以根据不同的屏幕尺寸和方向或者不同长度的文字调整大小的图像。它是非常方便而适用。
使用步骤:
A、运行 Android SDK Tools --àdraw9patch.bat文件
B、将一个png文件拖入左侧的面板中
C、选中左侧底部的Show patches【斑点】
D、将Patch scale设置为合适的值(比能够看见标记结果值稍大)
E、沿着图像的右边沿单击,以设置水平“格”引导
F、沿着图像的上边沿单击,以设置垂直“格”引导
G、在右侧面板中查看结果,移动“格”导引知道图像按照预期的结果进行拉伸。
H、要删除一个“格”导引,按住“Shift”键在导引的像素(黑色)上点击即可。
I、.9.png为扩展名保存图像。
(2)通过程序引用
图像资源(BitmapDrawable):通过ID即可设定用户界面Widget的属性。
A、如果你把flag.png放入/res/drawable目录中,并且向主布局中加入ImageView Widget
ImageView flagImageView = (ImageView)findViewById(R.id.imageView01);
flagImageView.setImageResource(R.drawable.icon);
B、直接访问BitmapDrawable对象
BitmapDrawable bitmapFlag = (BitmapDrawable)getResources().getDrawable(R.drawable.icon);
int iBitmapHeightInPixels = bitmapFlag.getIntrinsicHeight();
int iBitmapWidthInPixels = bitmapFlag.getIntrinsicWidth();
C、使用九格图像
调用getDrawable方法返回一个NinePatchDrawable对象。
和BitmapDrawable使用类似