本文介绍在Android开发中关于资源文件的存储操作。对于Android资源也是非常重要的,主要包括文本字符串(strings)、颜色(colors)、数组(arrays)、动画(anim)、布局(layout)、图像和图标(drawable)、音频视频(media)和其他应用程序使用的组件。
在Android开发中,资源文件是我们使用频率最高的,无论是string,drawable,还是layout,这些资源都是我们经常使用到的,而且为我们的开发提供了很多方便,不过我们平时接触的资源目录一般都是下面这三个:
当然了,Android资源文件还有其他类型,如下图所示:
这些资源都需要通过相应的资源类来进行管理。 下面请看管理这些资源的相关类:
int getColor(int id) //对应res/values/colors.xml
Drawable getDrawable(int id) //对应res/drawable/
XmlResourceParser getLayout(int id) //对应res/layout/
String getString(int id) 和CharSequence getText(int id) //对应res/values/strings.xml
InputStream openRawResource(int id) //对应res/raw/
void parseBundleExtra (String tagName, AttributeSet attrs, Bundle outBundle) //对应res/xml/
String[] getStringArray(int id) //对应res/values/arrays.xml
float getDimension(int id) //对应res/values/dimens.xml
下面让我们分别来介绍这些资源文件及使用方法。
1. 字符串:
字符串存储在/res/values/strings.xml文件中,它的格式比较简单,这里不再详述。正如上面所说,读取字符串需要通过如下代码:
String str = getResources().getString(R.string.hello);
CharSequence cha = getResources().getText(R.string.app_name);
2.字符串数组:
字符串数组存储在/res/values/arrays.xml文件中,它的格式如下代码所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="flavors">
<item>Vanilla</item>
<item>Chocolate</item>
<item>Strawberry</item>
</string-array>
</resources>
获取字符数组内容需要通过如下方式:
String strs[] = getResources().getStringArray(R.array.flavors);
3.颜色值:
颜色存储在/res/values/colors.xml文件中,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="text_color">#F00</color>
</resources>
颜色值是一个整数,只需要通过R.color.获取即可。
4.尺寸值:
尺寸存储在/res/values/dimens.xml文件中,格式如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="txt_app_title">22sp</dimen>
<dimen name="font_size_10">10sp</dimen>
<dimen name="font_size_12">12sp</dimen>
<dimen name="font_size_14">14sp</dimen>
<dimen name="font_size_16">16sp</dimen>
</resources>
获取尺寸使用下列代码:
float myDimen = getResources().getDimension(R.dimen.dimen标签name属性的名字);
另外,需要注意的是:尺寸不同的单位代表的值不一样,具体看下图:
官方推荐我们使用dp和sp进行表示,当然因情况而已,也可使用其他的尺寸。下同是一个简单的尺寸转换类,只是实现简单的转换,如果需求更多的朋友可以加入更多的转换功能,如下代码:
package com.enterprise.cqbc.utility;
/**
* Android尺寸单位转换工具类
* @Description: Android尺寸单位转换工具类
* @File: DisplayUtility.java
* @Package com.enterprise.cqbc.utility
* @Author Hanyonglu
* @Date 2012-03-24 下午05:03:07
* @Version V1.0
*/
public class DisplayUtility {
/**
* 将px值转换为dip或dp值,保证尺寸大小不变
* @param pxValue
* @param scale(DisplayMetrics类中属性density)
* @return
*/
public static int pxTodip(float pxValue, float scale) {
return (int) (pxValue / scale + 0.5f);
}
/**
* 将dip或dp值转换为px值,保证尺寸大小不变
* @param dipValue
* @param scale(DisplayMetrics类中属性density)
* @return
*/
public static int dipTopx(float dipValue, float scale) {
return (int) (dipValue * scale + 0.5f);
}
/**
* 将px值转换为sp值,保证文字大小不变
* @param pxValue
* @param fontScale(DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int pxTosp(float pxValue, float fontScale) {
return (int) (pxValue / fontScale + 0.5f);
}
/**
* 将sp值转换为px值,保证文字大小不变
* @param spValue
* @param fontScale(DisplayMetrics类中属性scaledDensity)
* @return
*/
public static int spTopx(float spValue, float fontScale) {
return (int) (spValue * fontScale + 0.5f);
}
}
5.简单的Drawable图形:
Drawable图形存储在/res/drawable/drawables.xml中,其格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<drawable name="red_rect">#F00</drawable>
</resources>
要在代码中使用应按如下格式:
ColorDrawable myDraw = (ColorDrawable)getResources().getDrawable(R.drawable.red_rect);
6.图像:
图像也是经常用到的一类资源,其格式有如下几种:
(1) 使用9格拉伸图像
由于手机屏幕拥有各种不同的分辨率,如果能够根据不同的屏幕尺寸和方向或者不同长度的调整图像大小,那么采用9格拉伸图像将是非常方便的,而且它是一种被拉伸而不失真的图像格式。
使用步骤如下:
A、运行 Android SDK Tools --adraw9patch.bat文件。
B、将一个png文件拖入左侧的面板中。
C、选中左侧底部的Show patches【斑点】。
D、将Patch scale设置为合适的值(比能够看见标记结果值稍大)。
E、沿着图像的右边沿单击,以设置水平“格”引导。
F、沿着图像的上边沿单击,以设置垂直“格”引导。
G、在右侧面板中查看结果,移动“格”导引知道图像按照预期的结果进行拉伸。
H、要删除一个“格”导引,按住“Shift”键在导引的像素(黑色)上点击即可。
I、命名为.9.png保存图像。
(2) 下面是打开adraw9patch.bat工具的例图:
关于9格拉伸图像的详细信息这里不再详述,有兴趣的朋友查阅相关文档。
(3) 在我们的程序中使用图像的方式因不同情况而采取不同的方法。如果将flag.png图像存放在/res/drawable目录中,我们在使用时只需要通过R.drawable.flag即可;也可以直接访问BitmapDrawable对象,如下代码:
BitmapDrawable bitmapFlag = (BitmapDrawable)getResources().getDrawable(R.drawable.icon);
int iBitmapHeightInPixels = bitmapFlag.getIntrinsicHeight();
int iBitmapWidthInPixels = bitmapFlag.getIntrinsicWidth();
如果是使用9格拉伸图像,则就不能使用上面的代码,需要将BitmapDrawable 改为NinePatchDrawable对象,即:
NinePatchDrawable bitmapFlag = (NinePatchDrawable)getResources().getDrawable(R.drawable.icon);
7.动画:
在Android中,动画由四种类型组成,如下图所示:
动画是存储在/res/anim/目录中,它可以使用XML文件来定义,也可以将其写的JAVA代码中,其XML代码格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<rotate
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:fromDegrees="300"
android:toDegrees="-360"
android:pivotX="10%"
android:pivotY="100%"
android:duration="10000" />
</set>
Animation主要有两种动画模式:一种是tweened animation(渐变动画),另一种是frame by frame(画面转换动画) ,用XML和JAVA表示分别如下所示:
下面依次说明下在xml文件中含义。
<alpha>