Android app中所有页面的特定颜色,被改变为另一状态,只因使用了getBackground().set…

前(fei)言(hua):论一行代码有多重(cao)要(dan)。
这段时间在开发一个项目,出现一个让我百思不得其解的奇葩问题,就是程序在运行过程中突然有一个特定颜色就丢失变为透明了。
一开始我还以为是我手机内存不够了(我的调试机确实系统内存几乎剩余0),又赶进度,就暂时把这个问题放一边了。结果悲催的结果发生了,有一天部门boss突然坐我边上来,要看app开发状况,当时项目又正处在联调期,调通的十来个接口中有1/4服务关闭、1/2返回的数据还是null,最坑的是程序颜色(而且是程序的主色调)丢失变成了透明,那演示效果,简直了。。。
结果可想而知,我解释的颜色丢失原因不知道boss是不懂还是压根就没听进去,就说看着好丑,哭,我是完全按照交互设计师要求做的啊。。。第二天,项目经理、需求经理、交互设计师,全换了。。。深深的内疚啊。

然后现在我在等待新需求明确,新页面设计完,然后重新开发,真的是重新开发啊,几乎没有一个页面和之前夭折的版本相同的。我决心搞清楚到底颜色丢失这个问题是怎么回事,终于在我各种方法用尽(AVD运行、换调试机、升级Android Studio、又重装回原来版本、改动大量代码……)的时候,尼玛,突然发现在我点击一个tab项后(整个应用一共4个fragment页面,唯独这个页面不是我写的,不知道里面的逻辑),后面新生成的页面或者重新载入的页面,颜色都丢失了。害我测试那么久,这个页面简直就是有毒啊。
我看完代码也没看出来到底这个页面的代码哪里有问题(技术还比较菜),又弄了不少时间才发现问题居然就出在一行代码的身上:

view.getBackground().setAlpha(0);

view是应用的标题栏,背景色为写死的应用的主色调。在创建这个页面的时候,因为这个页面与其他页面稍有不同,就设置为了透明。
查了些资料才发现,导致本文所说问题的原因是:默认情况下,所有的加载同一资源的实例都共享一个共用的状态,如果你更改一个实例的状态,其余的实例都会接收到相同的通知。所以使用getBackground()获取到程序主色调资源(该主色调在colors.xml中定义)后,setAlpha(0)就将该资源的值修改为了透明,所以之后在程序中所有引用该资源的地方都变为了透明。getBackground()慎用啊,改一处就全改了。。。
只想说一句,代码有毒!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值