今天遇到一个问题,在 Android 4.4 系统下,Java 代码布局中调用 RadioButton.setButtonDrawable(null) 无效,而在 xml 布局中设置元素属性 android:button="@null" 有效,并且在 Android 5.0+ 系统上调用 Java 代码布局也有效。
初步分析,应该是系统差异导致的,因此直接比较 Android 4.4 和 Android 5.0 系统代码中 RadioButton.setButtonDrawable() 方法的差异。
Android 4.4 版本的代码如下:
public void setButtonDrawable(Drawable d) {
if (d != null) {
if (mButtonDrawable != null) {
mButtonDrawable.setCallback(null);
unscheduleDrawable(mButtonDrawable);
}
d.setCallback(this);
d.setVisible(getVisibility() == VISIBLE,

在Android 4.4系统下,通过Java代码调用RadioButton的setButtonDrawable(null)设置按钮样式无效,而XML布局中设置android:button="@null"则有效。原因是Android 4.4的实现中不会处理传入的null值,而在Android 5.0及更高版本会正确处理。为解决此问题,可以通过获取RadioButton的预设样式字段并设置为null来达到预期效果。

3648

被折叠的 条评论
为什么被折叠?



