相信用过RadioGroup的同学都踩过很多坑,其中之一就是这个控件设计的不是很合理,不能设置里面的radiobutton的 排列方式(几行几列),导致我们开发的时候要调整里面的布局很是麻烦。
另外一个坑是 动态new 的时候选默认值的问题,这个在之前的一篇文章 RadioGroup中RadioButton默认选中问题 这个里面已经提到过了,就不再细说了。今天主要说说这个radiogroup怎么调整布局为自动换行的问题。
当我们自己写完RadioGroup 后,里面写好radiobutton,非常简单,一通复制粘贴,一大排就出来了,运行一下 ,非常棒,单选等功能都很好用。就像这样
对应的界面展示效果:
默认选中了第一个,然后 ,产品经理过来了,你这么放肯定是不行的,能不能改成4行3列的。
然后你心想,小儿科,去查了一下RadioGroup的属性,发现并没有原生支持的属性,可以设置内部RadioButton的几行几列的属性。
继续想一下 ,这还能难道我? 然后写了几个LinearLayout 把RadioButton套起来。
于是代码被你改成了这样
对应的界面展示效果
完美实现 6不6 ,嘴角浮起了轻蔑的微笑...
然后运行,点击选一下试试,woc,不对啊,这点击效果不对啊 ,发现原来默认选中的 没有取消选中啊,点击事件不对了啊,分分钟懵逼了...
所以其实原生的RadioGroup 存在的问题:
1. 如果不结合其他布局,例如LinearLayout, 则只能实现单行多个按钮组,或者单列多个按钮组。
2. 如果结合其他布局, 虽然可以实现多行多列的RadioButton布局,但是,如果不通过一些互斥算法,也无法实现按钮组的单选操作。
所以要对其进行改写:
然后将布局文件RadioGroup改为 自定义的MyRadioGroup
看下效果和 上面套用linearlayout的效果是一样的,而且不影响RadioGroup的点击事件。
但是这个仅仅是实现了自动换行的效果,没有真正实现可以设置 RadioGroup几行几列的效果。但是可以通过设置RadioButton的宽度就调这个每行的个数,怎么直接在自定义的RadioGroup直接写两个 设置行列的方法,也是没有搞定!如果大家有搞定的 或者有好的方法,可以分享一下!技术就是用来分享的!
如果还有其他问题,可以加入我们的qq群讨论交流:
开发一群:415275066 开发二群:537532956
来源:oschina
链接:https://my.oschina.net/u/1177694/blog/1860015