新しいAndroid サポート ライブラリ 22.1により、より多くの色付けが可能になりました!
サポート V4 ライブラリは、Android サポート ライブラリの多くのベースとして機能し、下位互換性をより容易にすることに重点を置いた多くのクラスを含んでいます。
DrawableCompat は、ドローアブルの着色を API 4 に戻すようになりました: DrawableCompat.wrap(Drawable) を介してドローアブルをラップするだけで、setTint()、setTintList()、および setTintMode() が機能します: 複数をサポートするためだけに個別のドローアブルを作成して維持する必要はありません色!
Chris Banes ブログからの情報:
Drawable ティンティング Lollipop に追加された Drawable ティント メソッドは、アセットに動的にティントを加えるのに非常に便利です。AppCompat は、v21 サポート ライブラリに独自の実装が組み込まれており、それをサポート v4 の DrawableCompat に抽出して、すべての人が使用できるようにしました。ただし、それがどのように機能するかを知ることは重要です。
Drawable drawable = ...;
// Wrap the drawable so that future tinting calls work
// on pre-v21 devices. Always use the returned drawable.
drawable = DrawableCompat.wrap(drawable);
// We can now set a tint
DrawableCompat.setTint(drawable, Color.RED);
// ...or a tint list
DrawableCompat.setTintList(drawable, myColorStateList);
// ...and a different tint mode
DrawableCompat.setTintMode(drawable, PorterDuff.Mode.SRC_OVER);
覚えておくべきことは、 を呼び出した後はDrawableCompat.wrap()
、結果が与えたものと同じ型であることに依存できないということです。代わりにDrawableCompat.unwrap()
、元の Drawable を取得するために使用する必要があります。
内部的には、ドローアブルを特別な「ティント ドローアブル」でラップし、指定されたティントからドローアブルのカラー フィルターを自動的に更新します。これにより、ColorStateList インスタンスを処理できます。
でもどうやって使うのかしら xml !! というオプションがあります
<TintImageView
android:layout_width=""
android:layout_height=""
android:src=""
android:backgroundTint="@color/green"/>
しかし、EditText TextView の描画可能な left|right アイコンを変更したい場合、それを行う方法はありません。