次のような選択可能なButton/ImageViewの描画可能なリソースがあります。
<selector>
<item Android:state_selected="true">
<layer-list>
<item>
<shape Android:shape="oval">
<solid Android:color="@color/blue"/>
</shape>
</item>
<item>
<bitmap
Android:src="@drawable/ic_icon"
Android:tint="@color/white"/>
</item>
</layer-list>
</item>
<item>
<layer-list>
<item>
<shape Android:shape="oval">
<solid Android:color="@color/background_unselected"/>
</shape>
</item>
<item>
<bitmap
Android:src="@drawable/ic_icon"
Android:tint="@color/icon_unselected"/>
</item>
</layer-list>
</item>
vectorDrawablesを使用するように切り替えたため、<bitmap>
タグでVectorDrawableを参照できないため、上記の宣言は機能しません。しかし、私が知る限り、それがアイコンに色を付ける唯一の方法です。
また、コードにカラーフィルターを適用することはできません。これは、アイコンだけでなく、ドローアブル全体に色を付けるためです。
助言がありますか?
色を属性として定義し、SVGでそれらを参照できます。次に、テーマによってスタイル設定されたドローアブルをロードできます。
短い例:
attributes.xml
<declare-styleable name="vectorColors">
<attr name="primaryColor" format="color" />
<attr name="secondaryColor" format="color" />
</declare-styleable>
ic_icon.xml
<path
Android:fillColor="?attr/primaryColor"
Android:pathData="...." />
<path
Android:fillColor="?attr/secondaryColor"
Android:pathData="...." />
styles.xml
<style name="svgColors">
<item name="primaryColor">@color/someColor</item>
<!-- also can use #RRGGBB way -->
<item name="secondaryColor">#ff0000</item>
</style>
次に、テーマとドローアブルをロードします。
Resources.Theme theme = getResources().newTheme();
theme.applyStyle(R.style.svgColors, false);
VectorDrawableCompat drawable = VectorDrawableCompat.create(getResources(), R.drawable.ic_icon, theme);
imageView.setImageDrawable(drawable);
特定のセレクターで置き換える必要があります
<item>
<bitmap
Android:src="@drawable/ic_icon"
Android:tint="@color/white"/>
</item>
沿って <item Android:drawable="@drawable/ic_icon">