首页 > 系统 > Android > 正文

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

2019-12-12 03:23:46
字体:
来源:转载
供稿:网友

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)); 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表