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

作者:ihrthk 时间:2021-12-11 04:33:52 

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

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

来源:http://blog.csdn.net/ihrthk/article/details/61442658

标签:setButtonDrawable(),兼容
0
投稿

猜你喜欢

  • 带你了解如何使用Spring基于ProxyFactoryBean创建AOP代理

    2022-04-28 09:17:37
  • 超详细讲解Java异常

    2023-10-02 07:30:16
  • 获取wince mac地址与IP地址解决方案

    2022-01-21 02:04:19
  • Java截取字符串的方法

    2023-11-07 09:30:02
  • java 查找替换pdf中的指定文本

    2022-08-17 14:04:46
  • springboot+spring data jpa实现新增及批量新增方式

    2023-01-27 03:45:53
  • java判断回文数示例分享

    2023-03-20 03:18:22
  • Android组合控件自定义标题栏

    2021-11-04 01:12:36
  • Java 异步编程实践_动力节点Java学院整理

    2023-06-18 17:04:12
  • Java享元设计模式优化对象创建提高性能和效率

    2022-05-26 23:12:02
  • java进阶之了解SpringBoot的配置原理

    2022-05-08 05:10:36
  • .net的命名空间类库的简单介绍

    2023-01-19 17:56:27
  • Android自定义分段式进度条

    2023-09-10 20:47:01
  • Sonar编译问题对应:File [...] can't be indexed twice.

    2023-11-25 11:07:28
  • springboot之如何获取项目目录路径

    2022-08-09 21:44:17
  • Android学习教程之悬浮窗菜单制作(9)

    2022-03-27 08:17:13
  • Android绘制仪表盘指针刻度

    2022-06-17 03:23:07
  • springsecurity 企业微信登入的实现示例

    2023-06-16 16:39:35
  • C#集合遍历时删除和增加元素的方法

    2021-12-11 18:53:24
  • 使用Spring Data JDBC实现DDD聚合的示例代码

    2022-05-04 05:11:23
  • asp之家 软件编程 m.aspxhome.com