首页 > 系统 > Android > 正文

RadioGroup实现单选框的多行排列

2019-12-12 00:02:43
字体:
来源:转载
供稿:网友

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”; 将这个属性去掉就会执行监听了.

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表