欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

RadioGroup实现单选框的多行排列

程序员文章站 2023-10-31 08:56:22
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”; 将这个属性去掉就会执行监听了.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。