Posted at

Android の setColorFilter() や setTint() がうまく動かない

※2017年に下書き保存していた記事の投稿


内容

Drawable の背景色を java コードから設定しているが、OS バージョンによってできるできないがあったので、OS バージョンによってメソッドを変えて対応した。


詳細

Drawable d = DrawableCompat.wrap(ContextCompat.getDrawable(getActivity(), R.drawable.round_icon_gray));

d.setColorFilter(ContextCompat.getColor(getActivity(), R.color.BG_WHITE_GRAY), PorterDuff.Mode.SRC_IN);

これだと、どうも Lolippo 以下で色の設定が効かない。

Drawable d = DrawableCompat.wrap(ContextCompat.getDrawable(getActivity(), R.drawable.round_icon_gray));

DrawableCompat.setTint(d, ContextCompat.getColor(getActivity(), R.color.BG_WHITE_GRAY));
DrawableCompat.setTintMode(d, PorterDuff.Mode.SRC_IN);

これだと、今度は Mashmallow 以上で色の設定が効かない。

ぐぐっても原因となりそうなものは見つからないし、だいぶハマったあとに気づいた。

DrawableCompat.wrap() でインスタンス作ってるから挙動が違うんじゃないか??

その箇所を削除したら 4.4〜8.0 で setColorFilter() で色がつけられるようになった。

初歩的な見落としだった。。

Drawable d = ContextCompat.getDrawable(getActivity(),R.drawable.round_icon_gray);

d.setColorFilter(ContextCompat.getColor(getActivity(),R.color.BG_WHITE_GRAY), PorterDuff.Mode.SRC_IN);