gpt4 book ai didi

Android View 背景变化意外

转载 作者:IT老高 更新时间:2023-10-28 23:32:57 25 4
gpt4 key购买 nike

我正在构建一个具有大量屏幕的应用。大多数屏幕的顶部都有一个带有背景颜色的 View 。

我经常使用 view.setBackgroundColor(color) 更改该颜色

奇怪的事情来了:有时在设置了一个 View 的颜色后,比如 #f14fb7 ,当在应用程序中导航时,其他 View 的背景设置为该颜色,而我并不希望它们这样做。有时甚至会发生在我没有为其设置 id 的 View 上,因此无法在这些 View 上调用 setBackgroundColor。

这种情况很少发生,并且与我尝试过的任何流程都不一致。

当我终止应用并重新启动它时,一切正常。

我唯一的猜测是一些内存泄漏之王,但我希望有一个更简单的解释。

谁能想到发生这种情况的一些原因?

*它发生在我的 Galaxy S3 上。

最佳答案

没有代码,这并不容易......但我猜你在多个 View 上重用相同的 ColorDrawable 如果你看看 View.setBackgroundColor()源代码:

public void setBackgroundColor(int color) {
if (mBGDrawable instanceof ColorDrawable) {
((ColorDrawable) mBGDrawable).setColor(color);
} else {
setBackgroundDrawable(new ColorDrawable(color));
}
}

您可以看到它改变了 ColorDrawable 的颜色,并且不会每次都创建一个新的。我很确定这就是你有这种奇怪行为的原因。

编辑

当您使用 android:background 在 xml 中设置初始背景颜色时,您正在这样做(根据 android doc):

Set the background to a given resource. The resource should refer to a Drawable object

据我了解,它会在膨胀期间设置字段 View.mBGDrawable。我建议你使用 View.setBackgoundDrawable(new ColorDrawable(the_color_int_code))) 而不是 setBackgroung(the_color_int_code)。它应该可以解决您的问题。

关于Android View 背景变化意外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com