• 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中设置根布局背景,又在代码中动态设置根布局背景。
  • 相关阅读:
    i7 13700k和i7 12700k差距
    Docker部署Canal监听MySQL binlog
    Dockerfile自定义镜像实操【镜像结构、Dockerfile语法、构建Java项目】
    swagger-03-文档注释使用
    网络传输性能netperf测试方法和下载
    vscode中讨厌的蓝色波浪线的去除小trick和原理
    创建一个GO模块
    2023最新SSM计算机毕业设计选题大全(附源码+LW)之java星光之夜香水网站的设计与开发bfmcr
    软件测试缺陷报告
    多表数据增量导入详细文档
  • 原文地址:https://blog.csdn.net/Agg_bin/article/details/126529547