RadioGroup實現單選框的多行排列
阿新 • • 發佈:2020-01-07
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”; 將這個屬性去掉就會執行監聽了.
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。