关于Drawable设置到控件中不显示的问题
来源:互联网 发布:淘宝一元秒杀神器 编辑:程序博客网 时间:2024/05/16 17:19
今天写项目时遇到个很变态的问题,就是关于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 0
- 关于Drawable设置到控件中不显示的问题
- 关于在TextView中设置DrawableLeft不显示的问题
- 关于viewPager中设置PagerTabStrip后不显示问题
- 关于ASP.NET控件不显示中文的问题
- 关于在TextView中设置DrawableLeft,DrawableRight等不显示的问题
- 关于FileUpload控件选择文件时触发显示图像事件在IE7以上版本中不显示的问题
- iOS开发关于UITableView从网络中获取到数据源,却在UITableView中不显示的问题
- 关于在自定义控件中事件不响应的问题
- 关于在自定义控件中事件不响应的问题
- Android 开发过程中关于Toast不显示的问题
- 关于Xcode中NoLog不显示的问题
- 关于CKEditor中HorizontalRule插件不显示的问题
- 关于服务端访问报错后直接跳转到错误页而不显示返回信息问题即 <customErrors> 标记的“mode”属性设置为“Off”的问题的解决方案
- vb中关于mscal.ocx控件的显示问题
- 关于Android开发中图片资源文件夹drawable中图片与资源ID号出现对不上的问题
- 关于GridView控件中设置大小的问题
- 关于android 中控件位置动态设置的问题
- 添加控件对话框不显示的问题
- wemall app商城源码Android之Native(原生)支付模式一demo
- 连不上无线网-只有自己的wifi连不上,不显示输入密码对话框的解决办法
- noip2016 Day2 T2:蚯蚓 (归并)
- 二 d3.数据绑定
- ubuntu 12.04 GDB调试常用指令
- 关于Drawable设置到控件中不显示的问题
- https 客户端与服务器端交互过程
- 用SSE加速CPU蒙皮计算
- hadoop实战(一) hadoop基本概念
- 数据库升级
- Git基础(1)
- cookie 和session 的区别详解
- 【codeforce508C】. Anya and Ghosts
- git 新建分支并提交本地代码到远程分支