我正在构建一个具有大量屏幕的应用程序。
大多数屏幕的顶部都有一个带有背景颜色的视图。
我经常使用 view.setBackgroundColor(color) 更改颜色
奇怪的事情来了:有时在设置一个视图的颜色后,例如 #f14fb7 ,在应用程序中导航时,其他视图的背景会设置为该颜色,而我并不希望它们这样做。
有时甚至会发生在我没有设置 id 的视图上,因此无法在这些视图上调用 setBackgroundColor 。
这种情况很少发生,并且与我尝试过的任何流程都不一致。
当我终止该应用程序并重新启动它时,一切都会按预期进行。
我唯一的猜测是内存泄漏之王,但我希望有一个更简单的解释。
有人能想到发生这种情况的原因吗?
*它发生在我的 Galaxy S3 上。
没有代码,这并不容易......但我猜你正在重用相同的代码ColorDrawable
在多个视图上,如果你看一下View.setBackgroundColor()
源代码 :
public void setBackgroundColor(int color) {
if (mBGDrawable instanceof ColorDrawable) {
((ColorDrawable) mBGDrawable).setColor(color);
} else {
setBackgroundDrawable(new ColorDrawable(color));
}
}
你可以看到它改变了颜色ColorDrawable
并且不要每次都创建一个新的。我很确定这就是你有这种奇怪行为的原因。
EDIT
当您在 xml 中设置初始背景颜色时android:background
你正在这样做(根据安卓文档 http://developer.android.com/reference/android/view/View.html#attr_android:background):
将背景设置为给定资源。资源应该引用一个 Drawable 对象
根据我的理解,它将设置字段View.mBGDrawable
充气期间。我建议你使用View.setBackgoundDrawable(new ColorDrawable(the_color_int_code)))
代替setBackgroung(the_color_int_code)
。它应该可以解决你的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)