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
投稿

猜你喜欢

  • 深入学习java位运算的基础知识

    2021-06-01 07:10:40
  • Spring整合Springmvc的相关介绍

    2022-03-30 10:47:08
  • Android开发之拖动条和评分组件用法分析

    2022-01-15 02:55:18
  • Android ADB常用命令总结

    2022-05-24 18:07:42
  • 简单讲解java中throws与throw的区别

    2022-06-01 05:16:55
  • Android仿拉手网团购App我的收藏界面实例代码

    2023-11-18 18:31:38
  • JAVA实现红包分发的示例代码

    2022-10-08 06:18:15
  • java和c/c++ 数据类型长度的比较

    2021-06-18 00:07:45
  • Android App应用启动分析与优化

    2023-06-09 01:08:11
  • C#导出pdf的实现方法(浏览器不预览直接下载)

    2023-11-04 05:48:10
  • Android Studio的安装及第一次启动时的配置问题

    2021-12-23 08:29:27
  • Java中防止数据重复提交超简单的6种方法

    2022-03-18 11:03:22
  • Unity打开淘宝app并跳转到商品页面功能的实现方法

    2023-06-17 01:05:18
  • idea 实现搜索jdk中的类和包操作

    2022-06-02 22:54:47
  • Android实现Tab布局的4种方式(Fragment+TabPageIndicator+ViewPager)

    2023-02-26 10:45:41
  • MyBatis if test 判断字符串相等不生效问题

    2021-10-11 22:42:01
  • java使用POI操作excel文件

    2023-05-17 00:37:12
  • C#中的并发集合Concurrent类

    2021-10-27 03:44:36
  • maven的pom文件与打包详解

    2023-12-24 00:23:51
  • Android DrawLayout结合ListView用法实例

    2021-10-29 02:30:28
  • asp之家 软件编程 m.aspxhome.com