Androidでは、pressやfocus等のstatement別にdrawableを指定するdrawableが作成可能だ。 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の使い方がよくわからん。 例えば、下記の設定を行なってみたが効かない。 // 効いていない
コメント
コメントを投稿