Android在XML和代码中,同时设置背景,导致背景叠加的问题

        今天简单讨论一个UI问题,目测是Android系统Bug!!!

1 前言:Android中设置背景

        Android设置背景,我们主要是通过2种方式:

  1. XML文件中通过属性设置:android:background。
  2. 代码中通过4个方法设置:setBackgroundDrawable、setBackground、setBackgroundResource以及setBackgroundColor。

2 问题:同时设置背景导致背景叠加

        在XML中设置background后,在代码中再次设置背景,直接导致背景叠加。

3 排查:问题原因排查

        已写Demo验证,如下问题原因被排除:

  • 不是机型问题
  • 不是Android版本问题
  • 不是设置颜色、resId与drawable的问题
  • 不是Activity、Fragment或Dialog的问题
  • 不是ConstraintLayout或者View的问题
  • 不是XML与代码设置背景异步问题

        最终验证,作为根布局时,会出现设置背景叠加的问题;作为子布局时,两种方式同时设置背景不会出现背景叠加。

4 分析:源码分析

        Android源码中可以了解到:

  1. 终极父类View在构造函数中,先通过解析XML的android:background属性,第一次设置背景;
  2. 代码中调用4个方法,最终都会调用到setBackgroundDrawable方法,再次设置背景。

5 结论:暂无权威结论

        由于分析时间有限,暂无权威结论,目测是Android系统Bug~

        小结:作为根布局时,会出现设置背景叠加的问题;作为子布局时,两种方式同时设置背景不会出现背景叠加。

6 建议:

  • 根布局需要动态改变背景时,XML中不能设置background属性,在代码中动态设置;
  • 根布局不需要动态改变背景,在XML中设置背景或者代码中设置;
  • 不能即在XML中设置根布局背景,又在代码中动态设置根布局背景。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值