アプリケーションから独自のXMLを読む
以前から使用していたXMLをAndroidアプリケーションでも使いたい。
普通にJSDKのパーサを使って直接ファイルを読めばいいんだが、それでは面白くない。どうせならばAndroidの流儀で、Javaクラスに変換後バイナリ形式で保存されたリソースとしてハンドルで参照する方法でアクセスしたい。
- 1. XMLファイルを用意する
使用したいXMLファイルをAndroidプロジェクト下のres/xmlに作成するかコピーする。
$PROJECT_ROOT | +--res | +--attr | +--layout | +--values | +--xml | +-- hogehoge.xml
(Androidはファイルの拡張子を気にしないため、.xmlという拡張子にする必要は無いようで、.configや.settingなども食ってくれる)
Eclipse + ADT Pluginで作ったAndroidプロジェクトを使用しているのならば、この操作と共に、hogehoge.xmlはバイナリに変換されて、R.Javaが変更されるだろう。
-
- R.java
public final class R { public static final class attr { 〜 } public static final class color { 〜 } public static final class drawable { 〜 } public static final class id { 〜 } public static final class layout { 〜 } public static final class string { 〜} public static final class xml { public static final int hogehoge=0x7f040000; }
Asset Packaging Toolによりリソースに変換されたhogehogeに対するハンドルが追記されている。
- 2. XMLを読み込む
抽象クラスContextを実装しているクラス(Activityクラスも勿論そうだ)であれば
- Context.java
public abstract Resources getResources();
getResourcesメソッドで、上記のXMLを読み込むためのパーサを取得することができる。
XmlResourceParser parser = getResources().getXml(R.xml.hogehoge);
XmlResourceParserはorg.xmlpull.v1.XmlPullParserを拡張しているため、StAXや本家XMLPullに慣れているプログラマは学習の必要も無いだろう。
XML Pull Parsing