java 单选框 水平排列,RadioGroup实现单选框的多行排列

本文介绍了如何在Android中使用RadioGroup实现多行布局的单选按钮,并解决了在横向布局时单选功能失效和事件监听不工作的问题。通过使用多个RadioGroup并添加点击事件监听器来清除其他行的选中状态,成功实现了所需功能。此外,还提到了初始化选中项时避免设置`check=true`导致监听器不执行的解决方案。
摘要由CSDN通过智能技术生成

搜索热词

RadioGroup的使用非常简单,只是一般情况下,只能是横向排列或竖向排列.如果让多横排列的的就不是那么简单的了。

也许有童鞋该说了,将RadioButton写到LineLayout中不久行了吗?经过检验确实可以那样做,刚开始我也是这样做到.不过运行起来发现了了一个bug---单选按钮不在是单选了.而且选择事件不会被监听到.这就要求我们去想办法了.其实实现起来也不难.只要多用几个RadioGroup就可以了(要在代码中处理一些事件)。

上代码:

1.xml中的布局:

android:id="@+id/main_tab_container"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingTop="30dp">

android:id="@+id/radio1"

android:layout_width="match_parent"

android:layout_height="60dp"

android:layout_margin="5dp"

android:orientation="horizontal">

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英镑" />

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港元" />

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美元Ԫ" />

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">

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瑞士法郎" />

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新加坡元" />

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瑞典克朗" />

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">

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日元" />

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加拿大元Ԫ" />

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澳大利亚元" />

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">

android:id="@+id/rb_10"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="@dimen/RB_text_size"

android:text="EOR欧元Ԫ" />

这样就实现了多行布局,这只是我布局中的一部分,其中 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实现,不过这种有点复杂.我还是下班回家了.

补充:@H_404_20@

使用RadioGroup.setcheck(RadioButton的id)初始化默认选中A按钮,但是监听不会执行的问题

解决:@H_404_20@因为已经给A按钮在布局中设置了check=”true”; 将这个属性去掉就会执行监听了.

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

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值