fresh digitable

めんどくさかったなってことを振り返ったり振り返らなかったりするための記録

FloatingActionButtonのBackgroundTintにselectorを使うには

FloatingActionButtonsetEnabled(false)とかいう邪道なことをしようとしていて、状態に合わせて色を変えたかったのでcolorリソースのselectorを次のような感じで指定しようとした。

ColorStateList colorList = ContextCompat.getColorStateList(getContext(), R.color.selector);
fab.setBackgroundTintList(colorList);

ところが、これでいざenabledをtrueとかfalseに変えてもずっとenabled=falseの色のまま変わらなかった。ボタン自体の状態は変わっているようで、enabled=falseの時はリスナに登録したアクションは起きないし、trueの時はちゃんと起きる。

先にsetBackgroundTintMode(Mode)を呼ぶといいという情報を見て試したり、ViewCompat.setBackgroundTintList()を試してみたが効果はなかった。

調べているといろんなバグレポートが見つかるので、いまちゃんと動かないのかなと半ば諦めていたが、layoutリソースにapp:backgroundTint=@color/selectorで指定することで思った通りの動きになった。最初にandroid:backgroundTintを使おうとしてAPI Level 21以上でしか有効でないという警告が出たのでjavaソースのほうで解決しようとしたのが敗因だった。

appパッケージの方もサジェストされてほしいものだ。

(support-lib: 24.0.0で確認)