改变shapedrawable颜色的问题

problems of changing the color of shapedrawable

我在两个地方使用了这个xml,我通过编程改变了其中一个的颜色,我发现另一个的颜色也变了,为什么会这样?

<shape xmlns:android="http://schemas.android.com/apk/res/android">
  <solid android:color="@color/blue" />
  <corners android:radius="2dp" />
</shape>

使用Drawable.mutate().

尽管每次从资源中加载 Drawable 时都会收到一个新实例,但出于性能原因,它们都共享 ConstantStateConstantState 通常包含可以为 Drawable 声明的所有属性,在您的示例中它的颜色。

因此,如果您修改其中一个 Drawables 的颜色,更改会反映在它的 ConstantState 中,并且更改对于共享相同 ConstantState 的所有其他实例都是可见的.

正如 Drawable.mutate() 的文档所述:

Make this drawable mutable. This operation cannot be reversed. A mutable drawable is guaranteed to not share its state with any other drawable. This is especially useful when you need to modify properties of drawables loaded from resources. By default, all drawables instances loaded from the same resource share a common state; if you modify the state of one instance, all the other instances will receive the same modification.

你可以看看这个很棒的post by Romain Guy for more details