測試突然提了一個機型兼容的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.............未完待續;