Android:stateに応じて切り替わるdrawable・・・StateListDrawable
Androidでは、pressやfocus等のstatement別にdrawableを指定するdrawableが作成可能だ。
xmlでは<selector>で指定を行う。
ところで、こういったリソースをxmlで書くのは非常にしんどいので事ある毎にコードで実装しているのだが、<selector>を自前で実装する方法を研究してみた。
それを実現するのは、StateListDrawableというDrawableだ。
下記は、StateListDrawableをButtonの背景色に適用するサンプル。
面白いポイントは以下の通り。
ところで、Drawable.setStateの使い方がよくわからん。
例えば、下記の設定を行なってみたが効かない。
xmlでは<selector>で指定を行う。
ところで、こういったリソースをxmlで書くのは非常にしんどいので事ある毎にコードで実装しているのだが、<selector>を自前で実装する方法を研究してみた。
それを実現するのは、StateListDrawableというDrawableだ。
下記は、StateListDrawableをButtonの背景色に適用するサンプル。
Button btn = new Button( context ); Drawable tomei = new ColorDrawable( Color.argb(0,0,0,0) ); Drawable tap = new ColorDrawable( Color.argb(0xff,0xff,0,0) ); Drawable normal= new ColorDrawable( Color.argb(0xff,0,0xff,0) ); StateListDrawable d = new StateListDrawable(); d.addState( new int[]{ android.R.attr.state_pressed }, tap ); d.addState( new int[]{ android.R.attr.state_focused }, tap ); d.addState( new int[]{ android.R.attr.state_enabled }, normal ); d.addState( new int[]{ -android.R.attr.state_enabled }, tomei ); btn.setBackgroundDrawable( d );
面白いポイントは以下の通り。
- orじゃなくて配列で指定するんだね。
- xmlでいうfalseを指定するにはマイナス(minus)にするんだね!(1時間くらい探した・・・)
ところで、Drawable.setStateの使い方がよくわからん。
例えば、下記の設定を行なってみたが効かない。
// 効いていないようだ d.setState( new int[]{ android.R.attr.constantSize } );
コメント
コメントを投稿