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.............未完待續;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章