Android setButtonDrawable()的兼容问题解决办法

Android  setButtonDrawable()的兼容问题解决办法

setButtonDrawable()的兼容问题

API16实现

/** * Set the background to a given Drawable, identified by its resource id. * * @param resid the resource id of the drawable to use as the background */ public void setButtonDrawable(int resid) { if (resid != 0 && resid == mButtonResource) { return; } mButtonResource = resid; Drawable d = null; if (mButtonResource != 0) { d = getResources().getDrawable(mButtonResource); } setButtonDrawable(d); } /** * Set the background to a given Drawable * * @param d The Drawable to use as the background */ public void setButtonDrawable(Drawable d) { if (d != null) { if (mButtonDrawable != null) { mButtonDrawable.setCallback(null); unscheduleDrawable(mButtonDrawable); } d.setCallback(this); d.setState(getDrawableState()); d.setVisible(getVisibility() == VISIBLE, false); mButtonDrawable = d; mButtonDrawable.setState(null); setMinHeight(mButtonDrawable.getIntrinsicHeight()); } refreshDrawableState(); }

API23实现

/** * Sets a drawable as the compound button image given its resource * identifier. * * @param resId the resource identifier of the drawable * @attr ref android.R.styleable#CompoundButton_button */ public void setButtonDrawable(@DrawableRes int resId) { final Drawable d; if (resId != 0) { d = getContext().getDrawable(resId); } else { d = null; } setButtonDrawable(d); } /** * Sets a drawable as the compound button image. * * @param drawable the drawable to set * @attr ref android.R.styleable#CompoundButton_button */ @Nullable public void setButtonDrawable(@Nullable Drawable drawable) { if (mButtonDrawable != drawable) { if (mButtonDrawable != null) { mButtonDrawable.setCallback(null); unscheduleDrawable(mButtonDrawable); } mButtonDrawable = drawable; if (drawable != null) { drawable.setCallback(this); drawable.setLayoutDirection(getLayoutDirection()); if (drawable.isStateful()) { drawable.setState(getDrawableState()); } drawable.setVisible(getVisibility() == VISIBLE, false); setMinHeight(drawable.getIntrinsicHeight()); applyButtonTint(); } } }

结论

RadioButton和CheckBox都是Android app中常用的Widget,它们派生于CompoundButton,允许使用者自行设置背景和按钮的样式,不过,有时我们仅希望简单的设置一个有状态的背景,并隐藏其默认样式。可是,当我们调用setButtonDrawable(null)或setButtonDrawable(0)时,却发现完全没有效果。原来,CompoundButton的setButtonDrawable的代码实现中屏蔽了null或resid为0的Drawable,迫使我们必须传入有效的Drawable对象。

这时候,透明颜色就可以派上用场了:

button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));

参考:

隐藏RadioButton, CheckBox图片 setButtonDrawable:

RadioButton和CheckBox都是Android app中常用的Widget,它们派生于CompoundButton,允许使用者自行设置背景和按钮的样式,不过,有时我们仅希望简单的设置一个有状态的背景,并隐藏其默认样式。可是,当我们调用setButtonDrawable(null)或setButtonDrawable(0)时,却发现完全没有效果。原来,CompoundButton的setButtonDrawable的代码实现中屏蔽了null或resid为0的Drawable,迫使我们必须传入有效的Drawable对象。

这时候,透明颜色就可以派上用场了:

button.setButtonDrawable(new ColorDrawable(Color.TRANSPARENT));

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

时间: 2024-11-09 02:08:37

Android setButtonDrawable()的兼容问题解决办法的相关文章

win7软件兼容问题解决办法

  win7软件兼容问题解决办法 最近几天装了个win7,遇到了不少的问题 通过同学的帮助 通过usb引导安装,pe系统解压缩 刷bios,主分区激活 装好后,出现了软件的不兼容, eclipse,war3等 后来经过网上的查找 在程序上右击弹出属性窗口 选择兼容标签页 根据win7提示的兼容模式进行相应的选择 还有下面几个复选框也要进行选中 才能使程序正常运行起来!

Open Sans字体兼容问题解决办法[font-face]

参考:http://www.tantengvip.com/2014/11/open-sans/ 1.font-face使用方法 font-face是CSS3中的一个模块,主要是把自定义的Web字体嵌入到网页中 @font-face的语法规则: @font-face { font-family: <FontName>; src: <source> [<format>][,<source> [<format>]]*; [font-weight: &l

Android.permission.MODIFY_PHONE_STATE权限问题解决办法_Android

Android.permission.MODIFY_PHONE_STATE权限限制已经改为系统权限  普通应用程序已经无法调用 所以网上找到的那些如何使用android.permission.MODIFY_PHONE_STATE的文章  均已失效 但仍有引用的办法 就是让你的程序程序系统程序 一种就是预制到ROM中 另一种就是使用系统签名 第一种我已经试验通过,第二种还有待验证. Also, just to save everyone some searching. I've been rese

IE与FireFox的JavaScript兼容问题解决办法_javascript技巧

以下是 我在开发中遇到的情况: 1.动态删除table里的某一行. table:表示table对象. k:表示行号 table.rows[k].removeNode(true); //firefox执行失败,ie执行成功 IE与FireFox兼容写法 table.deleteRow(k); 2.为HTML标签自定义属性. inputElement:表示表单元素. propertyName:表示表单元素下的某个属性 inputElement.propertyName; //firefox执行失败,

Android webview旋转屏幕导致页面重新加载问题解决办法

Android webview旋转屏幕导致页面重新加载问题解决办法 1. 在create时候加个状态判断 protected void onCreate(Bundle savedInstanceState){ ... if (savedInstanceState == null) { mWebView.loadUrl("your_url"); } ... } 2. 重载保存状态的函数: @Override protected void onSaveInstanceState(Bundl

Android 使用volley过程中遇到的问题解决办法

Android 使用volley过程中遇到的问题解决办法 本文主要介绍使用 volley 过程中遇到的问题,错误提示: com.android.volley.NoConnectionError: java.io.InterruptedIOException",内容加载失败,问题出在重复调用 queue.start() 方法. 错误提示:com.android.volley.NoConnectionError: java.io.InterruptedIOException",然后就内容加

Android ListView与getView调用卡顿问题解决办法

Android ListView与getView调用卡顿问题解决办法 解决办法1,设置ListView高度为固定值或者match_parent/ifll_parent @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { Log.d("onMeasure", "onMeasure"); isOnMeasure = true; super.onMeasure(

Android的App启动时白屏的问题解决办法

Android的App启动时白屏的问题解决办法 在手机上调试后第一次启动后会等待很长时间白屏, 设置style样式,给activity加上设置的样式,完美解决 参考一下下面的代码.就可以解决(亲测好用) <style name="SplashTheme" parent="AppBaseTheme"> <!-- 将splash图片设置在这,这样这张图片取代白屏 --> <item name="android:windowBack

Android 将view 转换为Bitmap出现空指针问题解决办法

Android 将view 转换为Bitmap出现空指针问题解决办法 在做Android 项目的时候,有时候可能有这样的需求,将一个View 或者一个布局文件转换成一个Bitmap  对象. 方法其实大都差不多.但这其中有一些小细节需要注意一下.最近在项目中用到了这个功能,现在分享一下,希望能帮助到遇到果这个 问题的人. 首先是转换 的代码: /** * 将View(布局) 转换为bitmap * @param view * @return */ public static Bitmap cre