レイアウト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なこと。
2013/06/01
2011/10/15
子Viewのタッチイベントを取得する
子Viewの実装の有無に関わらず、親となるViewGroupでタッチイベントを取得したい時ってありますよね。
そんな時に便利なのがViewGroup#onInterceptTouchEventというメソッド。
これを利用するには下のサンプルのようにViewGroupを継承した独自ViewGroupクラスを作成し、その中のonInterceptTouchEventを上書きする必要があります。
ひとまず流れだけ。
ちなみにこれをXMLから指定する場合は
こんな感じで使います。
そんな時に便利なのがViewGroup#onInterceptTouchEventというメソッド。
これを利用するには下のサンプルのようにViewGroupを継承した独自ViewGroupクラスを作成し、その中のonInterceptTouchEventを上書きする必要があります。
ひとまず流れだけ。
ちなみにこれをXMLから指定する場合は
こんな感じで使います。
2011/10/10
LayoutInflaterでツボにはまる
LayoutInflaterを利用する際は
こんな感じで利用していると思いますが、ここで落とし穴。
item.xml
こんな風に指定してあったパラメーターが実際の表示上では こんなことに。。。
面倒臭くてもinflateでmatch_parent(fill_parent)パラメーターが必要なViewをもってくる時は、第2引数の親となるViewGroupをきっちり指定しましょう。
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をきっちり指定しましょう。
登録:
投稿 (Atom)