2013/06/01

レイアウトxmlにViewの追加情報を仕込む

レイアウトxmlからViewを取得する時に、その取得対象が固定的な内容だったらFragmentに固定で書いても良いけれど、パースするxmlがコロコロ変わる場合はどのViewにどの情報を表示して良いか分からないよね!

→ xmlに仕込みを入れておけばいいじゃない!!(楽観視)


サンプル:TextViewに曜日情報を仕込んで、Activityから取得する。


こんなカスタム属性を用意しておけば、ViewのIDと日付を同時に取れます。


レイアウトxmlにこんな感じでカスタム属性を仕込みます。3行目は自分のアプリ名。namespaceのnxは「noxi」の略なので自分に合ったものに変えることをお勧めします。


android.view.LayoutInfleter$Factoryを実装したクラスを作ります。これを実装することで、xmlパースの処理をフックすることが出来ます。


LayoutInflater#fromでLayoutInflaterを取得し、setFactoryで今回作成したクラスをセットします。ちなみにLayoutInflater$Factory2とかあるらしいけど、違いは親のViewGroupが引数に入るかどうかとAPI11なこと。