Android RadioButton、CheckBox、Switch在低于API 21机器上显示异常,button设置为null无效(AndroidX升级导致)

测试突然提了一个机型兼容的BUG,在4.4的某个华为机器上RadioButton显示异常,查看其他页面,发现CheckBox也出现同样问题。

下面截了个图:

在这个设备上突然出现了黑色圆圈,这是radiobutton原始的样式,checkbox也是出现了系统默认的样式;

不耽误大家时间,先说结论和办法,然后在分析一下:

问题原因是升级到AndroidX导致的在API21以下的机型会出现,测试了几个出现的都是华为的设备。

但是androidx1.0.0是正常的,androidx1.1.0的问题;

解决办法:

1、第一种办法:

在你xml使用<RadioButton>时不光要添加

android:button=‘@null’;

还要添加一个:

app:buttonCompat=‘@null’

就好了;

 

2、第一种方式每一处使用都需要添加,如果觉得不太好想统一处理就就考虑第二和第三种

第二种就是自定义radiobutton,看下radiobutton的构造函数源码:

可以看到两个参数的构造,默认传了个样式,我们自定义的时候将这个参数传0即可

同理checkbox、switch和radiobutton一样都继承CommpoundButton,看源码都是一样的问题;

 

 

3、第三种

在AppTheme里加入如下代码:

全局设置buttonCompat为空,至于为什么下面分析下;

注意:加入apptheme可以,但是如果你使用radiobutton、checkbox、switch的activity如果设置了自己的style的化,你可以加在activity的style里,避免覆盖导致设置无效;

 

下面就简单分析下问题根源:

首先进入源码看见了两参的构造函数,他默认传了一个style,那就去找一下这个style在哪里:

你可以直接按照下面图片方法找,也可以直接全局搜radiobuttonstyle直接定位到values中;

 

在项目的External Libraries展开找到appcpmpat

展开之后res --> values

打开之后搜索radiobuttonstyle

找到了buttoncompat

这个样式在androidx1.0.0中

就没有buttoncompat;

 

问题就在这里,他默默这个属性之后你光设置buton=null是不行的,还要把buttoncompat带上一起null才行;

至于为什么1.1.0版本就会多了这个属性,emmmmmmm.............未完待续;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值