LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

※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);
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0