RadioGroup实现单选框的多行排列
程序员文章站
2022-06-06 23:46:34
radiogroup的使用非常简单,只是一般情况下,只能是横向排列或竖向排列.如果让多横排列的的就不是那么简单的了。
也许有童鞋该说了,将radiobutton写到linelay...
radiogroup的使用非常简单,只是一般情况下,只能是横向排列或竖向排列.如果让多横排列的的就不是那么简单的了。
也许有童鞋该说了,将radiobutton写到linelayout中不久行了吗?经过检验确实可以那样做,刚开始我也是这样做到.不过运行起来发现了了一个bug---单选按钮不在是单选了.而且选择事件不会被监听到.这就要求我们去想办法了.其实实现起来也不难.只要多用几个radiogroup就可以了(要在代码中处理一些事件)。
上代码:
1.xml中的布局:
<relativelayout android:id="@+id/main_tab_container" android:layout_width="fill_parent" android:layout_height="fill_parent" android:paddingtop="30dp"> <radiogroup android:id="@+id/radio1" android:layout_width="match_parent" android:layout_height="60dp" android:layout_margin="5dp" android:orientation="horizontal"> <radiobutton android:id="@+id/rb_1" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="gbp英镑" /> <radiobutton android:id="@+id/rb_2" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="hkd港元" /> <radiobutton android:id="@+id/rb_3" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="usd美元Ԫ" /> </radiogroup> <radiogroup android:id="@+id/radio2" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/radio1" android:layout_margin="5dp" android:orientation="horizontal"> <radiobutton android:id="@+id/rb_4" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="chf瑞士法郎" /> <radiobutton android:id="@+id/rb_5" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="sgd新加坡元" /> <radiobutton android:id="@+id/rb_6" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="sek瑞典克朗" /> </radiogroup> <radiogroup android:id="@+id/radio3" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/radio2" android:layout_margin="5dp" android:orientation="horizontal"> <radiobutton android:id="@+id/rb_7" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="jpy日元" /> <radiobutton android:id="@+id/rb_8" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="cad加拿大元Ԫ" /> <radiobutton android:id="@+id/rb_9" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:textsize="@dimen/rb_text_size" android:text="aud澳大利亚元" /> </radiogroup> <radiogroup android:id="@+id/radio4" android:layout_width="match_parent" android:layout_height="60dp" android:layout_below="@+id/radio3" android:layout_margin="5dp" android:orientation="horizontal"> <radiobutton android:id="@+id/rb_10" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="@dimen/rb_text_size" android:text="eor欧元Ԫ" /> </radiogroup> </relativelayout>
这样就实现了多行布局,这只是我布局中的一部分,其中 android:textsize=”@dimen/rb_text_size” 为自己定义的字体大小.
2.activity中的使用以及处理:
public class selectmoneyactivity extends baseactivity { string strbtnselected = ""; //记录选择的是哪个选项 private radiogroup rg1, rg2, rg3, rg4; private radiobutton rb_1, rb_2, rb_3, rb_4, rb_5, rb_6, rb_7, rb_8, rb_9, rb_10; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_select_money); initview(); } private void initview() { rg1 = (radiogroup) findviewbyid(r.id.radio1); rg2 = (radiogroup) findviewbyid(r.id.radio2); rg3 = (radiogroup) findviewbyid(r.id.radio3); rg4 = (radiogroup) findviewbyid(r.id.radio4); rb_1 = (radiobutton) findviewbyid(r.id.rb_1); rb_2 = (radiobutton) findviewbyid(r.id.rb_2); rb_3 = (radiobutton) findviewbyid(r.id.rb_3); rb_4 = (radiobutton) findviewbyid(r.id.rb_4); rb_5 = (radiobutton) findviewbyid(r.id.rb_5); rb_6 = (radiobutton) findviewbyid(r.id.rb_6); rb_7 = (radiobutton) findviewbyid(r.id.rb_7); rb_8 = (radiobutton) findviewbyid(r.id.rb_8); rb_9 = (radiobutton) findviewbyid(r.id.rb_9); rb_10 = (radiobutton) findviewbyid(r.id.rb_10); btn_back = (button) findviewbyid(r.id.btn_back); btn_next = (button) findviewbyid(r.id.btn_next); //创建监听器,为每个radiobutton注册监听 btnselected btnselected1 = new btnselected("1"); btnselected btnselected2 = new btnselected("2"); btnselected btnselected3 = new btnselected("3"); btnselected btnselected4 = new btnselected("4"); btnselected btnselected5 = new btnselected("5"); btnselected btnselected6 = new btnselected("6"); btnselected btnselected7 = new btnselected("7"); btnselected btnselected8 = new btnselected("8"); btnselected btnselected9 = new btnselected("9"); btnselected btnselected10 = new btnselected("10"); rb_1.setonclicklistener(btnselected1); rb_2.setonclicklistener(btnselected2); rb_3.setonclicklistener(btnselected3); rb_4.setonclicklistener(btnselected4); rb_5.setonclicklistener(btnselected5); rb_6.setonclicklistener(btnselected6); rb_7.setonclicklistener(btnselected7); rb_8.setonclicklistener(btnselected8); rb_9.setonclicklistener(btnselected9); rb_10.setonclicklistener(btnselected10); //点击事件的监听器 public class btnselected implements view.onclicklistener { private string btnid; public btnselected(string str) { btnid = str; } @override public void onclick(view v) { strbtnselected = btnid; //选择的某一项 isselect = true; //点击了第一行 ,就把另外行的点击项清空 if (btnid.equals("1") || btnid.equals("2") || btnid.equals("3")) { rg2.clearcheck(); rg3.clearcheck(); rg4.clearcheck(); } else if (btnid.equals("4") || btnid.equals("5") || btnid.equals("6")) { rg1.clearcheck(); rg3.clearcheck(); rg4.clearcheck(); } else if (btnid.equals("7") || btnid.equals("8") || btnid.equals("9")) { rg1.clearcheck(); rg2.clearcheck(); rg4.clearcheck(); } else { rg1.clearcheck(); rg2.clearcheck(); rg3.clearcheck(); } } } }
已经搞定.还有一种方法就是自定义radiogroup实现,不过这种有点复杂.我还是下班回家了.
补充:
使用radiogroup.setcheck(radiobutton的id)初始化默认选中a按钮,但是监听不会执行的问题
解决:因为已经给a按钮在布局中设置了check=”true”; 将这个属性去掉就会执行监听了.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。