我使用资源设置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);
答案 0 :(得分:0)
在设置drawable的任何值之前使用mutate()
。
来源:http://www.curious-creature.org/2009/05/02/drawable-mutations/