読者です 読者をやめる 読者になる 読者になる

fresh digitable

セミコロンたちが躍動する おいらのコードを 皆さんに 見せたいね

FloatingActionButtonのBackgroundTintにselectorを使うには

Android TIL

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で確認)