【问题标题】:Invalidate GradientDrawable使 GradientDrawable 无效
【发布时间】:2018-09-06 15:24:57
【问题描述】:

我有以下 xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">

    <solid android:color="@color/color_primary_dark" />
    <size android:width="25dp" android:height="25dp" />
    <stroke android:width="1dp" android:color="@android:color/white" />

</shape>

在我的应用程序的某个时刻,我像这样改变这个形状的颜色:

// priority_button has this shape as is src
(priority_button.drawable as GradientDrawable).setColor(ContextCompat.getColor(this, android.R.color.holo_orange_light))

问题是:如果我销毁该活动,然后重新打开同一个活动,此形状将保持我设置的最后一个颜色(在本例中为 android.R.color.holo_orange_light),我想重置该形状与 xml (R.color.color_primary_dark) 中定义的颜色相同。

由于我以编程方式设置颜色,我认为我正在更改 xml 本身,当重新打开活动并绘制视图时,它会获取我设置另一种颜色的 xml。

有什么方法可以重置 xml 值或类似的东西吗?

【问题讨论】:

    标签: android xml kotlin reset


    【解决方案1】:

    在更改颜色之前尝试在drawable 上调用mutate()

    根据setColor(int argb) 文档,它指出:

    更改颜色将影响从资源加载的可绘制对象的所有实例。建议在更改颜色之前调用 mutate()。

    所以也许这也会影响到你。

    【讨论】:

    • 这是对堆栈最有用的注释。我不知道为什么推荐这种改变笔画颜色的方法的人没有提到这一点。我为此损失了 3 个小时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    • 2014-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多