ラベル View の投稿を表示しています。 すべての投稿を表示
ラベル View の投稿を表示しています。 すべての投稿を表示

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なこと。

2011/10/15

子Viewのタッチイベントを取得する

子Viewの実装の有無に関わらず、親となるViewGroupでタッチイベントを取得したい時ってありますよね。
そんな時に便利なのがViewGroup#onInterceptTouchEventというメソッド。

これを利用するには下のサンプルのようにViewGroupを継承した独自ViewGroupクラスを作成し、その中のonInterceptTouchEventを上書きする必要があります。
ひとまず流れだけ。


ちなみにこれをXMLから指定する場合は
こんな感じで使います。

2011/10/10

LayoutInflaterでツボにはまる

LayoutInflaterを利用する際は こんな感じで利用していると思いますが、ここで落とし穴。

LayoutInflater#inflate(int resource, ViewGroup root, boolean attachToRoot)
これの第2引数ViewGroupにnullを指定すると、item.xmlのパラメーターが自動でwrap_contentになってしまう。


item.xml
こんな風に指定してあったパラメーターが実際の表示上では こんなことに。。。


面倒臭くてもinflateでmatch_parent(fill_parent)パラメーターが必要なViewをもってくる時は、第2引数の親となるViewGroupをきっちり指定しましょう。