Android中原始资源、任意xml资源和资产的使用


1.任意xml资源文件
    除了结构化资源外,Android还允许将任意xml文件用作资源。此方法将使用资源的优势延伸到了任意xml文件。首先,它提供了一种快速方式来根据所生成的资源ID引用这些文件。其次,该方法允许本地化这些资源xml文件。再次,可以在设备上高效地编译和存储这些xml文件。需要以此方式读取的xml文件存储在/res/xml子目录下。
    就像处理其他Android XML资源文件一样,AAPT(Android Asset Packaging Tool)将编译此XML文件为二进制文件,然后将它放入应用程序包中。如果希望解析这些文件,需要使用一个XmlpULLParser实例。
private String getEventsFromAnXMLFile(Context 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


2.原始资源
    除了任意XML文件,Android还支持使用原始文件。这些原始资源位于/res/raw下,包括音频、视频或文本文件等需要本地化或通过资源ID引用的原始文件资源。与/res/xml下的XML文件不同,这些文件没有编译,而是按原样转移到应用程序包中。但是,每个文件在R.java中都会生成一个标识符。
    假设将文本文件放在/res/raw/test.txt下,能用以下代码读取该文件。
private String getStringFromRawFile(Context activity) throws IOException {
		Resources r = activity.getResources();
		InputStream is = r.openRawResource(R.raw.test);
		String myText = convertStreamToString(is);
		is.close();
		return myText;
	}

	private String convertStreamToString(InputStream is) throws IOException {
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		int i = is.read();
		while (i != -1) {
			baos.write(i);
			i = is.read();
		}
		return baos.toString();
	}


3.资产
    Android还提供了一个/assets目录,可以将要包含在包中的文件放在这里。这个目录与/res具有相同的级别,也就是说它还未包含在/res子目录中。/assets中的文件不会在R.java中生成资源ID,必须指定文件路径才能读取它们。文件路径是以/assets开头的相对路径。可以使用AssetManager类来访问这些文件。
// Note: Exceptions are not shown in the code
	String getStringFromAssetFile(Context activity) throws IOException {
		AssetManager am = activity.getAssets();
		InputStream is = am.open("test.txt");
		String s = convertStreamToString(is);
		is.close();
		return s;
	}

猜你喜欢

转载自wander-bird.iteye.com/blog/2178843