介绍

        在默认情况下,单选按钮显示为一个圆形图标,并且在该图标旁边放置一些说明性文字。在程序中,一般将多个单选按钮放置在按钮组中,使这些单选按钮表现出某种功能,当用户选中某个单选按钮后,按钮组中的其他按钮将被自动取消选中状态。在 Android 手机应用中,单选按钮应用也十分广泛。

        RadioButton 组件的 android:checked 属性用于指定选中状态,属性值为 true 时,表示选中;属性值为 false 时,表示取消选中,默认为 false。通常情况下,RadioButton 组件需要与 RadioGroup 组件一起使用,组成一个单选按钮组。在XML 布局文件中,添加 RadioGroup 组件的基本格式如下:

  • orientation设置单选按钮的排列方式
  • checked设置单选按钮的初始状态
<RadioGroup
        android:id="@+id/rg_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/rb_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="男"
            android:checked="true"
            android:textSize="18sp"
            android:textColor="#FF6600" />

        <RadioButton
            android:id="@+id/rb_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="女"
            android:textSize="18sp"
            android:textColor="#FF6600" />
    </RadioGroup>

获取选中项的值 

在改变单选按钮组的值时获取

        在改变单选按钮组的值时获取选中的单选按钮的值,首先需要获取单选按钮组,然后为其添加OnCheckedChangeListener,并在其 onCheckedChanged() 方法中根据参数 checkedId 获取被选中的单选按钮,并通过其 getText() 方法获取该单选按钮对应的值。例如,要获取 id 属性为 radioGroup1 的单选按钮组的值,可以通过下面的代码实现。

RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup1);
sex.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {

	@Override
	public void onCheckedChanged(RadioGroup group, int checkedId) {
		RadioButton r=(RadioButton)findViewById(checkedId);
		r.getText(); //获取被选中的单选按钮的值
	}
});

单击其他按钮时获取

        单击其他按钮时获取选中项的值时,首先需要在该按钮的单击事件监听器的 onClick() 方法中,通过 for 循环语句遍历当前单选按钮组,并根据被遍历到的单选按钮的 isChecked() 方法判断该按钮是否被选中,当被选中时,通过单选按钮的 getText() 方法获取对应的值。 

final RadioGroup sex=(RadioGroup)findViewById(R.id.radioGroup1);
Button button=(Button)findViewById(R.id.button1); //获取一个提交按钮
button.setOnClickListener(new View.OnClickListener() {

	@Override
	public void onClick(View v) {
		for(int i=0;i<sex.getChildCount();i++){
			RadioButton r=(RadioButton)sex.getChildAt(i); //根据索引值获取单选按钮
			if(r.isChecked()){ //判断单选按钮是否被选中
			r.getText(); //获取被选中的单选按钮的值
			break; //跳出for循环
			}
		}
	}
});

例子

自定义单选按钮

编写布局文件

  • android:button="@null"  把单选按钮的圈圈去掉
  • android:background  设置自己想要变化的形状
<RadioGroup
        android:id="@+id/rg_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/rg_1"
        android:layout_marginTop="50dp"
        android:orientation="horizontal" >

        <RadioButton
            android:id="@+id/rb_3"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:gravity="center"
            android:text="男"
            android:button="@null"
            android:background="@drawable/selector_orange_radiobutton"
            android:checked="true"
            android:textSize="18sp"
            android:textColor="#000" />

        <RadioButton
            android:id="@+id/rb_4"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:gravity="center"
            android:text="女"
            android:button="@null"
            android:background="@drawable/selector_orange_radiobutton"
            android:textSize="18sp"
            android:textColor="#000"
            android:layout_marginLeft="10dp"/>
    </RadioGroup>

自定义drawable的selector.xml

drawable→右键→new→Drawable Resource File→写上selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!--实心+颜色+4个角弧度-->
    <item android:state_checked="true">
        <shape>
            <solid android:color="#AA6600" />
            <corners android:radius="5dp" />
        </shape>
    </item>

    <!--空心+线条宽度+颜色+4个角弧度-->
    <item android:state_checked="false">
        <shape>
            <stroke android:width="1dp"
                android:color="#AA6600"/>
            <corners android:radius="5dp" />
        </shape>
    </item>

</selector>

编写RadioButtonActivity

public class RadioButtonActivity extends AppCompatActivity {

    private RadioGroup mRg_2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio_button);
        mRg_2 = (RadioGroup) findViewById(R.id.rg_2);

        mRg_2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup radioGroup, int i) {
                RadioButton radioButton = (RadioButton) findViewById(i);
                Toast.makeText(RadioButtonActivity.this, radioButton.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
}

效果

android Radiobutton设置选中背景以后文字被包裹了_android

 

逻辑推理题

编写布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <!--逻辑问题-->
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="一天,张山的店里来了一个顾客,挑了25元的货,顾客拿出100元,
        张山没有零钱找不开,就到隔壁李石的店里把这100元换成零钱,回来给顾客找了75元零钱。
        过一会,李石来找张山,说刚才的那100是假钱,张山马上给李石换了张真钱,问张山赔了多少钱?"
        android:textSize="16sp"/>

    <!--单选按钮组-->
    <RadioGroup
        android:id="@+id/rg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <!--单选按钮A-->
        <RadioButton
            android:id="@+id/rb_a"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="A:125" />
        <!--单选按钮B-->
        <RadioButton
            android:id="@+id/rb_b"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="B:100" />
        <!--单选按钮C-->
        <RadioButton
            android:id="@+id/rb_c"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="C:175" />
        <!--单选按钮D-->
        <RadioButton
            android:id="@+id/rb_d"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="D:200" />
    </RadioGroup>

    <!--提交按钮-->
    <Button
        android:id="@+id/bt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提 交" />

</LinearLayout>

编写RadioButtonActivity2

public class RadioButtonActivity2 extends AppCompatActivity {

    Button bt; //定义提交按钮
    RadioGroup rg; //定义单选按钮组
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_radio_button2);
        bt = (Button) findViewById(R.id.bt); //通过ID获取布局中的提交按钮
        rg = (RadioGroup) findViewById(R.id.rg); //通过ID获取布局中的单选按钮组

        bt.setOnClickListener(new View.OnClickListener() { //为提交按钮设置单击事件监听器
            @Override
            public void onClick(View v) {
                for (int i = 0; i < rg.getChildCount(); i++) {
                    //根据索引值获取单选按钮
                    RadioButton radioButton = (RadioButton) rg.getChildAt(i);
                    if (radioButton.isChecked()) { //判断单选按钮是否被选中
                        if (radioButton.getText().equals("B:100")) { //判断答案是否正确
                            Toast.makeText(RadioButtonActivity2.this,
                                    "回答正确", Toast.LENGTH_LONG).show();
                        } else {
                            //错误消息提示框
                            AlertDialog.Builder builder = new AlertDialog.Builder(RadioButtonActivity2.this);
                            builder.setMessage("回答错误,下面请看解析:当张山换完零钱之后," +
                                    "给了顾客75还有价值25元的商品,自己还剩下了25元。这时," +
                                    "李石来找张山要钱,张山把自己剩下的相当于是李石的25元给了李石," +
                                    "另外自己掏了75元。这样张山赔了一个25元的商品和75元的人民币," +
                                    "总共价值100元。");
                            builder.setPositiveButton("确定", null).show();//单击确定消失
                        }
                        break; //跳出for循环
                    }
                }
            }
        });
    }
}

效果

android Radiobutton设置选中背景以后文字被包裹了_单选按钮_02