因为RadioGroup继承自LinearLayout,所以所有RadioButton要么纵向排成一行,要么横向排成一行。如果想把RadioButton分成两行,可能会想到使用下面的XML布局,就是用两个LinearLayout。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/type" />
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/new_macbook" />
<RadioButton
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/macbook_air" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/macbook_pro" />
<RadioButton
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/imac" />
</LinearLayout>
</RadioGroup>
</LinearLayout>
上面的运行结果如下图这样,可以把RadioButton分为多行,但是这样的RadioGroup会失去单选的功能。因为所有RadioButton必须作为RadioGroup的子View才行。
![](https://img.haomeiwen.com/i323464/18b48e1738fe9381.png)
于是就想了个注意,如果要把所有RadioButton放在两行,就弄两个RadioGroup。然后在其中某个RadioGroup被选中时,清除另一个RadioGroup的选中状态。实现如下:
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/type" />
<RadioGroup
android:id="@+id/rg1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/new_macbook" />
<RadioButton
android:id="@+id/rb2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/macbook_air" />
</RadioGroup>
<RadioGroup
android:id="@+id/rg2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/macbook_pro" />
<RadioButton
android:id="@+id/rb4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/imac" />
</RadioGroup>
</LinearLayout>
Java:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
/**
* Created by xuhongchuan on 16/4/30.
*/
public class PriceActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{
private RadioGroup mRg1;
private RadioGroup mRg2;
private RadioButton mRb1;
private RadioButton mRb2;
private RadioButton mRb3;
private RadioButton mRb4;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_price);
initView();
}
private void initView() {
mRg1 = (RadioGroup) findViewById(R.id.rg1);
mRg2 = (RadioGroup) findViewById(R.id.rg2);
mRb1 = (RadioButton) findViewById(R.id.rb1);
mRb2 = (RadioButton) findViewById(R.id.rb2);
mRb3 = (RadioButton) findViewById(R.id.rb3);
mRb4 = (RadioButton) findViewById(R.id.rb4);
mRb1.setOnCheckedChangeListener(this);
mRb2.setOnCheckedChangeListener(this);
mRb3.setOnCheckedChangeListener(this);
mRb4.setOnCheckedChangeListener(this);
}
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
switch (buttonView.getId()) {
case R.id.rb1:
mRg2.clearCheck();
break;
case R.id.rb2:
mRg2.clearCheck();
break;
case R.id.rb3:
mRg1.clearCheck();
break;
case R.id.rb4:
mRg1.clearCheck();
break;
default:
break;
}
}
}
网友评论