pro android 2第三章(十)资源进阶(下)

任意的XML资源文件

Android还支持任意的XML资源文件。这就让普通XML文件扩充了三个资源文件的特性。第一,可以通过产生的ID来快速引用;第二,可以本地化这些XML文件;第三,可以通过编译使得这些XML文件效率更高地存储在设备上。

需要用这种方式读取的XML文件存储在/res/xml子目录下。这里有个例子/res/xml/test.xml

<rootelem1>

<subelem1>

Hello World from an xml sub element

<sublem1>

</rootelem1>

和其他Android XML资源一样,AAPT在把这个XML文件放进应用包之前会对它进行编译。你需要使用XmlPullParser的一个实例来解析这些文件。你可以使用下面的代码段来获取

XmlPullParser的实例:

Resources res = activity.getResources();

XmlResourceParser xpp = res.getXml(R.xml.test);

返回的XmlResourceParserXmlPullParser的一个实例,继承自java.util.AttributeSet。表3-18显示了一个读取test.xml文件更加详细的代码段。

3-18 使用XmlPullParser

private String getEventsFromAnXMLFile(Activity activity)

throws XmlPullParserException, IOException

{

StringBuffer sb = new StringBuffer();

Resources res = activity.getResources();

XmlResourceParser xpp = res.getXml(R.xml.test);

xpp.next();

int eventType = xpp.getEventType();

while (eventType != XmlPullParser.END_DOCUMENT)

{

if(eventType == XmlPullParser.START_DOCUMENT)

{

sb.append("******Start document");

}

else if(eventType == XmlPullParser.START_TAG)

{

sb.append("nStart tag "+xpp.getName());

}

else if(eventType == XmlPullParser.END_TAG)

{

sb.append("nEnd tag "+xpp.getName());

}

else if(eventType == XmlPullParser.TEXT)

{

sb.append("nText "+xpp.getText());

}

eventType = xpp.next();

}//eof-while

sb.append("n******End document");

return sb.toString();

}//eof-function

通过上面的代码,你可以看到如何获取XmlPullParser,如何使用XmlPullParser来定位XML文件里的元素,以及如何使用XmlPullParser的其他方法来获取XML元素的详细信息。如果你想运行这段代码,你必须如之前所述建立一个XML文件,在菜单或者按钮的click中调用getEventsFromAnXMLFile函数。它会返回一个字符串,你可以使用Log.d调试函数将它输出到日志流里面。

使用Raw Resources(原始文件)

Android还支持原始资源文件。这些文件在/res/raw目录下,是一些音频、视频或者文本文件。这些文件需要本地化和用资源ID来引用。和在/res/xml目录下XML文件不同的是,这些文件不会被编译,而是被原封不动的搬进应用程序包。不管怎样,它们在R.java里面也产生识别器。如果你有/raw/test.txt,那么你可以通过下面代码读取test.txt

3-19 读取Raw Resource

String getStringFromRawFile(Activity activity)

{

Resources r = activity.getResources();

InputStream is = r.openRawResource(R.raw.test);

String myText = convertStreamToString(is);

is.close();

return myText;

}

String convertStreamToString(InputStream is)

{

ByteArrayOutputStream baos = new ByteArrayOutputStream();

int i = is.read();

while (i != -1)

{

baos.write(i);

使用Assets

Android还有/assets目录,和/res目录平级。在/assets目录下的文件不会在R.java里产生ID。你必须通过文件路径来读取它们。这个路径是以/assets开始的相对路径。你需要使用AssetManager类来获得这些文件:

//这段代码未包含异常处理文件

String getStringFromAssetFile(Activity activity)

{

AssetManager am = activity.getAssets();

InputStream is = am.open("test.txt");

String s = convertStreamToString(is);

is.close();

return s;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值