20

私は新しい Android L プレビューに取り組んでおり、現在はドローアブルの色合いの概念を扱っています。

Android L Developer Preview のドローアブル ティントに関する新しい情報があるかどうかを知りたいです。

私はこのドキュメントを読みました:

Android L Developer Preview を使用すると、ビットマップまたは 9 パッチをアルファ マスクとして定義し、カラー リソースまたはカラー リソースに解決されるテーマ属性 ( など ?android:attr/colorPrimary) を使用してそれらに色を付けることができます。これらのアセットを 1 回だけ作成し、テーマに合わせて自動的に色を付けることができます。

しかし、以前のバージョンとの違いがわかりませんでした。ColorFilter画像に色合いを使用またはPorterDuffColorFilter適用する方法を知っています。これに関するヘルプをいただければ幸いです。

4

2 に答える 2

21

L から、XML で色合いを指定できます。これらは、テーマ属性 (示されているように)、色の状態のリスト、色のリソース、または明示的な 16 進数の色コードを参照できます。デフォルトでは、色合いモードは SRC_IN ですが、android:tintMode 属性を使用して別のモードに設定できます。

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/my_icon"
    android:tint="?android:attr/colorControlNormal" />

デフォルトのコントロールはすべて、通常の状態 (チェックされていないチェック ボックスなど) に ?android:attr/colorControlNormal を使用し、アクティブな状態 (チェックされているチェック ボックスなど) に ?android:attr/colorControlActivated (デフォルトで ?android:attr/colorAccent にマップ) を使用します。チェックボックス)。

これらの属性を独自のアプリ ドローアブルで使用して、デフォルトのフレームワーク カラーを継承したり、それらを再定義してデフォルトまたはアクティブ化されたコントロールの色を変更したりできます。アプリに固有の属性を参照することもできます (図を参照)。

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/my_icon"
    android:tint="?attr/myThemeAttribute" />
于 2014-08-26T00:14:51.320 に答える
13

新しい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 アイコンを変更したい場合、それを行う方法はありません。

于 2015-05-29T07:18:55.147 に答える