[Android]selectorでもattributeを使いたい!

公開日: 

selectorを使うと、Buttonの押してる状態や、disabledの状態のときのボタンの見た目の変更ができる。

disabledのときは別画像を表示するようにしたかったのだが、動作させるとクラッシュしてしまった。

どうやらこれを見ると、selectorにattributeの値を入れてるとクラッシュしてしまうバグが有るらしい。

cf: Android Selector Drawable doesnt work with attributes

しかしattributesをなんとしても使いたい!!

というのでなんとかしたメモです。

sponcer link

対策

selectorで画像を変える際は通称drawableでセットしてあげないといけない。

ならば、selectorのファイル自体をテーマごとに用意して、それをattributesで指定してあげれば解決できた。

popとofficialの2つのテーマがあったとして、それぞれのdrawableのxmlを準備する。

いずれも通常の状態とdisable時のボタンの様子を表してます。

 

次に先程作成したdrawableをattributesで呼び出せるようにstyles.xmlを準備します。

 

ここまできたら準備完了!

あとはButtonで先程作ったattributeを指定するだけ!

これでテーマごとにボタンの画像を差し替えることができるようになります。

 

Rippleの場合のselector

おまけとして、rippleを適用する場合のxmlはこんな感じで定義してます。

 

rippleの場合はrippleの中でselectorを定義するのがコツ。

 

まとめ

selectorでattributeが使えなくて一瞬絶望しましたが、考えようによってはうまく使えたので諦めず考えて良かったです。

  • このエントリーをはてなブックマークに追加
  • Pocket
PAGE TOP ↑