当前位置: 移动技术网 > IT编程>移动开发>Android > Android setButtonDrawable()的兼容问题解决办法

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

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

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网