私は2つの場所でこのxmlを使用し、2つのプログラムの1つの色をプログラムで変更しましたが、もう一方の色も変更されています。shapedrawableの色を変更する際の問題
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/blue" />
<corners android:radius="2dp" />
</shape>
私は2つの場所でこのxmlを使用し、2つのプログラムの1つの色をプログラムで変更しましたが、もう一方の色も変更されています。shapedrawableの色を変更する際の問題
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/blue" />
<corners android:radius="2dp" />
</shape>
Drawable.mutate()
を使用してください。
リソースからDrawable
をロードするたびに、パフォーマンス上の理由から新しいインスタンスが受信されても、それらはすべてConstantState
を共有します。このConstantState
には、通常、Drawable
で宣言できるすべてのプロパティがあり、その例の色があります。
Drawables
のいずれかの色を変更した場合、変更内容はConstantState
に反映され、変更内容は同じConstantState
を持つ他のすべてのインスタンスで表示されます。 Drawable.mutate()
状態のドキュメントとして
:
は、この描画可能に変更可能にします。この操作は元に戻すことはできません。変更可能なドロウアブルは、他のドロウアブルと状態を共有しないことが保証されています。これは、リソースからロードされたドロウアブルのプロパティを変更する必要がある場合に特に便利です。デフォルトでは、同じリソースからロードされたすべてのドロウアブルインスタンスは共通の状態を共有します。あるインスタンスの状態を変更すると、他のすべてのインスタンスは同じ変更を受け取ります。
この素晴らしいpost by Romain Guy for more detailsを確認できます。
それは、thxの作品! – tysheng