Android布局资源保留旧值

时间:2014-09-02 05:36:00

标签: android android-resources

我使用资源设置TextView的一些背景样式(特定边框等)。 无法在资源中设置背景颜色,因为它可能会根据某些规则而有所不同。

但是,此资源的任何后续使用都会重复使用分配的最后一种颜色,即使在完全不同的片段中也是如此。看起来颜色被分配给Resource,而不仅仅是在TextView中,并在整个应用程序中重用。但是,重要的是要注意不同的TextView按预期显示不同的背景颜色。

此处的问题是,资源的任何其他未来使用都使用分配给它的最后一种颜色,而不是资源XML文件中的默认颜色集。每次我使用资源时,我都不想在代码中重置它。还有其他办法吗?

资源XML(specialbackground) - 请注意默认背景颜色为白色(#FFFFFF):

<?xml version="1.0" encoding="utf-8"?>

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

    <solid android:color="#FFFFFF" />
    <corners android:radius="7dp" />
    <stroke
        android:width="2dip"
        android:color="#000000" />
</shape>

在代码中使用(更改颜色) - 这可以按预期工作:

tvText.setBackgroundResource(R.drawable.specialbackground);
GradientDrawable gd = (GradientDrawable) tvText.getBackground();
gd.setColor(myObj.getColor());

在代码中使用(问题发生的地方(不设置任何背景颜色) - 它使用上次定义的最后颜色,即使在完全不同的片段中):

tvText.setBackgroundResource(R.drawable.rounded_border);

1 个答案:

答案 0 :(得分:0)

在设置drawable的任何值之前使用mutate()

来源:http://www.curious-creature.org/2009/05/02/drawable-mutations/