如何获取Android中Button的背景色,解决RippleDrawable转ColorDrawable异常
你遇到的强转异常是因为Android 5.0(API 21)及以上版本中,Button的默认背景自带涟漪点击效果,getBackground()返回的是RippleDrawable类型,而非你预期的ColorDrawable,直接强转就会触发类型转换异常。
解决方案
方案1:兼容RippleDrawable获取背景色
不需要修改布局,通过判断Drawable类型逐层提取ColorDrawable即可:
public int getButtonBackgroundColor(Button button) { Drawable background = button.getBackground(); if (background instanceof ColorDrawable) { return ((ColorDrawable) background).getColor(); } else if (background instanceof RippleDrawable) { // 提取RippleDrawable内部的第一层Drawable,即实际设置的纯色背景 Drawable innerDrawable = ((RippleDrawable) background).getDrawable(0); if (innerDrawable instanceof ColorDrawable) { return ((ColorDrawable) innerDrawable).getColor(); } } // 兜底返回默认颜色,可根据业务自定义修改 return Color.WHITE; }
调用时直接传入你获取到的Button实例即可。
方案2:修改布局去掉默认Ripple效果
如果不需要涟漪点击效果,直接在布局的Button标签中明确指定纯色背景:
<Button android:id="@+id/<ButtonId>" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#你需要的色值" android:text="按钮文本"/>
设置后你原本的代码可以直接正常运行,不会再触发强转异常。
内容的提问来源于stack exchange,提问作者Anuradha Korde
相关产品推荐
相关产品推荐

