关于Drawable设置到控件中不显示的问题

今天写项目时遇到个很变态的问题,就是关于Drawable不显示.

1.在此之前,我们需要先知道Drawable这个类,如果你是在代码中设置进去的话,必须要设置setBound(),就像这样:
//ResourceUtil.getDra是我的一个工具类.根据版本获取Drawable的
Drawable drawble = ResourceUtil.getDra(getContext(),R.drawable.ic_pay_select_checked);
button.setBounds(0,0,drawble.getMinimumWidth(),drawble.getMinimumHeight());
2.现在的需求就是为RadioButton设置点击事件,xml创建就不用我说了,我们用代码创建–StateListDrawable(不了解的自行百度)
            StateListDrawable btnRightDra = new StateListDrawable();
            //获取图片资源
            Drawable checkDra = ResourceUtil.getDra(getContext(),R.drawable.ic_pay_select_checked);
            //根据颜色生成纯色的Drawable
            ColorDrawable colorDrawable =new                             ColorDrawable(ResourceUtil.getCol(getContext(),R.color.colorBGWhite));
            //设置非check的Drawable
            btnRightDra.addState(new int[]{-android.R.attr.state_checked},
                    colorDrawable);
            //设置check的Drawable
            btnRightDra.addState(new int[]{android.R.attr.state_checked},checkDra
                    );
            btnRightDra.addState(new int[]{},colorDrawable);

            btnRightDra.setBounds(0,0,btnRightDra.getMinimumWidth(),btnRightDra.getMinimumHeight());
            acRBtn.setCompoundDrawables(null,null,btnRightDra,null);

好了,之后运行测试,发现drawable无法显示,之后不信邪,用xml文件写了个相同功能的并在xml中引用

创建drawable
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="tran">@color/R.color.colorBGWhite</drawable>
    </resources>

创建selector ic_pay_select.xml

引用drawable
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/tran" android:state_checked="false" />
    <item android:drawable="@drawable/ic_pay_select_checked" android:state_checked="true" />
</selector>
之后引用
        <android.support.v7.widget.AppCompatRadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/general_dimen_x1"
            android:background="@color/colorBGWhite"
            android:button="@null"
            android:drawableRight="@drawable/ic_pay_select"
            android:drawablePadding="@dimen/general_dimen_x2"
            android:padding="@dimen/general_dimen_x2"
            android:text="支付宝" />

嗯,没错,没用!根本就不出现!

3.解决办法

之后通过调试发现,StateListDrawable的getMinimumWidth()和getMinimumHeight()返回的都是0,这是因为我们设置的非check(就是平常状态)的Drawable是ColorDrawable,而ColorDrawable因为是我们生成的是没有最小高度和最小宽度的!而StateListDrawable是会获取平常状态下显示的Drawable的最小宽高最为自己的最小宽高的,所以我们只要把StateListDrawable设置最小宽高设置为btnRightDra或者自己设置个值就行了,想通这点后我们连ColorDrawable都不需要了,因为这是我以为StateListDrawable不出来是因为Drawble不能为null的原因,更改后的代码

            AppCompatRadioButton acRBtn = (AppCompatRadioButton) rgPayway.getChildAt(i);

            StateListDrawable btnRightDra = new StateListDrawable();
            Drawable checkDra = ResourceUtil.getDra(getContext(),R.drawable.ic_pay_select_checked);
            btnRightDra.addState(new int[]{-android.R.attr.state_checked},
                    null);
            btnRightDra.addState(new int[]{android.R.attr.state_checked},checkDra
                    );

            //重点就在这里
            btnRightDra.setBounds(0,0,checkDra.getMinimumWidth(),checkDra.getMinimumHeight());
            acRBtn.setCompoundDrawables(null,null,btnRightDra,null);

问题解决!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值