Android View 背景意外变化

2024-03-30

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

我经常使用 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(使用前将#替换为@)

Android View 背景意外变化 的相关文章

随机推荐

  • 如何从源代码构建 VSCode 应用程序包

    我正在尝试在 Mac 上从源代码构建 VSCode 并制作应用程序包 我尝试以下这些说明 https github com Microsoft vscode wiki How to Contribute packaging这表明你可以运行g
  • 向量迭代器

    我有以下代码 vector
  • 如何告诉 python HTMLParser 停止

    我有一个用例告诉我们当标签是link它的属性是rel dns prefetch然后就说预解析dns已启用 我做了一个标志pre resolve dns enabled并将其设置为 true 如下所示 class Extractor HTML
  • Laravel:获取调用控制器方法的视图的名称

    在 Laravel 中 是否可以获取调用您当前所在的控制器方法的视图的名称 我的网站中有两个版本的表单 一种是在网站 外部 使用 即用户未登录 另一种是在网站 内部 使用 这些表单在表示上略有不同 但它们包含所有相同的字段并调用相同的存储方
  • 在 Spring MongoDB 中的 ReplaceRoot 管道阶段中使用 $mergeObjects

    我希望将这个片段复制到 Java 代码中 db getCollection admins comptes client ceov4 aggregate lookup from contrats ceov4 localField CUSTOM
  • 实现 retryWhen 逻辑

    我有一个需要会话 cookie 来处理网络调用的应用程序 我在用着Retrofit RxJava 但是 会话可能会过期 带有 401 未经授权状态的改造错误 在这种情况下我想重新进行身份验证 以获取新的 cookie 并重试之前的调用 我该
  • Python:编写csv文件

    我试图在 Windows 计算机上使用 Python 3 2 编写一个简单的 CSV 文件 但是我没有运气 来自Python 3 2 的 csv 模块文档 http docs python org release 3 2 library c
  • 在 C 中解析日期 Http 标头的简单方法是什么?

    我想解析电子邮件 http 日期标头 有没有一种简单的方法可以做到这一点 而无需编写自己的字符串解析函数 Example Date Fri 19 Mar 2010 11 44 02 0700 为了澄清 解析出Date 这部分很简单 我正在谈
  • Zend 框架引导问题

    我已经在新安装 Zend Framework 应用程序一段时间了 但我不知道发生了什么 我有两个想要使用的自定义操作助手 并且我想在引导程序中初始化它们 但似乎我的 init 函数根本没有被调用 在启动应用程序的 index php 中 我
  • 如何更改 IPV6 地址的字节顺序(从网络到主机,反之亦然)?

    我知道ntoh s l and hton s l 适用于 2 和 4 字节的整数 现在 我面临着转换 16 个字节长的 IPv6 地址的问题 是否有用于此目的的现成函数 TIA Jir 我不确定ntoh and hton与 IPv6 相关
  • 为什么我不能在 Konva.Shape.fillPatternImage(imageObj) 中使用 Konva.Image()?

    以下是来自的示例Konvajs http konvajs github io docs shapes Image html加载图像的库 var imageObj new Image imageObj onload function var
  • Mongoose 模式要求数组可以为空

    我有这个架构 var StuffSchema new mongoose Schema id type String required true unique true name type String required true mongo
  • 构建 Java EE 6 项目时出现 FilerException

    我在 Netbeans 7 中有一个 Java EE 6 项目 当我在 IDE 中编译并启动它时 该项目运行良好 但是 当我清理和构建项目时 我得到了 java lang RuntimeException javax annotation
  • 如何提高@patch和MagicMock语句的可读性和可维护性(避免长名称和字符串标识)?

    在我的测试代码中 我有很多样板表达式 Magic return 我还有很长的字符串来标识要模拟的函数的路径 重构期间不会自动替换字符串 我更愿意直接使用导入的函数 示例代码 from mock import patch MagicMock
  • 如何在远程存储库上运行 hg recovery 命令

    在 teamcity 中运行构建时出现以下错误 Failed to collect changes error C Program Files TortoiseHg hg exe config ui interactive False pu
  • 在 cakephp 中分配布局

    我们可以在该特定控制器中为整个控制器定义一个布局吗 我之前已经在应用程序控制器的过滤器之前用于此目的 但它不再解决它 所以我需要在控制器中应该有一些适用于的布局定义该控制器的所有操作 Regards use it 在你的行动中 this g
  • JavaScript - 对象字面量的优点

    我读过 我应该使用对象文字 而不是简单地编写一堆函数 对象字面量有什么优点 有例子吗 正如 Russ Cam 所说 您可以避免污染全局命名空间 这在当今组合来自多个位置 TinyMCE 等 的脚本时非常重要 正如 Alex Sexton 所
  • 如何使用 WebApplicationFactory 覆盖 Autofac 容器中的服务

    我正在使用 WebApplicationFactory 编写一些集成测试 我使用 Autofac 作为我的依赖解析器 在我的测试中 我试图覆盖其中一项注册 以便我可以模拟其中一项依赖项 使用aspnetcore默认的ConfigureSer
  • 如何将html5画布保存到服务器

    我将一些图像加载到我的画布上 然后在加载后我想单击一个按钮将该画布图像保存到我的服务器上 我可以看到脚本工作正常 直到它到达 toDataURL 部分并且我的函数停止执行 我究竟做错了什么 这是我的代码
  • Android View 背景意外变化

    我正在构建一个具有大量屏幕的应用程序 大多数屏幕的顶部都有一个带有背景颜色的视图 我经常使用 view setBackgroundColor color 更改颜色 奇怪的事情来了 有时在设置一个视图的颜色后 例如 f14fb7 在应用程序中