关于Drawable设置到控件中不显示的问题
2016-12-07 17:29
543 查看
今天写项目时遇到个很变态的问题,就是关于Drawable不显示.
好了,之后运行测试,发现drawable无法显示,之后不信邪,用xml文件写了个相同功能的并在xml中引用
创建selector ic_pay_select.xml
嗯,没错,没用!根本就不出现!
问题解决!!
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);
问题解决!!
相关文章推荐
- flex 控件的重要属性
- 学习Winform文本类控件(Label、Button、TextBox)
- Delphi控件ListView的属性及使用方法详解
- web下载的ActiveX控件自动更新
- WinForm实现按名称递归查找控件的方法
- C#中父窗口和子窗口之间控件互操作实例
- C#编写ActiveX网页截图控件
- Android编程之Button控件用法实例分析
- Android控件之CheckBox、RadioButton用法实例分析
- 在Android开发中使用自定义组合控件的例子
- 一款超酷的Android自定义加载控件
- 直接拿来用的Android刮奖控件
- Android重写View实现全新的控件
- MFC中动态创建控件以及事件响应实现方法
- WinForm自定义函数FindControl实现按名称查找控件
- Android控件之ProgressBar用法实例分析
- WinForm拖拽控件生成副本的解决方法
- ASP.NET动态添加用户控件的方法
- WinForm遍历窗体所有子控件的方法
- ASP.NET的HtmlForm控件学习及Post与Get的区别概述