Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

※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);
koringo2
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away