RadioGroup + RadioButton 提供了一种多选一的模式。下面是xml 文件:
<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:text = "请选择你的性别"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<RadioGroup android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:id="@+id/rg1">
<RadioButton android:text="男" android:id="@+id/rb1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<RadioButton android:text="女" android:id="@+id/rb2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<RadioButton android:text="不男不女" android:id="@+id/rb3"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</RadioGroup>
</LinearLayout>
改配置中定义了一个RadioGroup,而这个Group包括了3个RadioButton。性别对于人来说,只可能是一种,所以适合用RadioButton。需要指出的是,如果RadioButton不放在一个RadioGroup中,是不存在互斥的效果的。
RadioGroup 支持 setOnCheckedChangeListener,也就是说,改Group下面的选择发生变化的时候,RadioGroup可以监听到这种变化。
RadioButton 也支持setOnCheckedChangeListener。 不过他们对应的Listener不同,RadioGroup 是:RadioGroup.OnCheckedChangeListener,而RadioButton是:
CompoundButton.OnCheckedChangeListener.
RadioGroup.getCheckedRadioButtonId(),可以得到选择的RadioButton的ID。
代码如下:
package org.terry;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.Toast;
public class RadioBoxDemo extends Activity{
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.radiobox);
final RadioGroup rg1 = (RadioGroup)findViewById(R.id.rg1);
RadioButton rb1 = (RadioButton) findViewById(R.id.rb1);
RadioButton rb2 = (RadioButton) findViewById(R.id.rb2);
RadioButton rb3 = (RadioButton) findViewById(R.id.rb3);
Button btn1 = (Button)findViewById(R.id.rbtn1);
rg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
public void onCheckedChanged(RadioGroup group, int checkedId) {
RadioButton rb = (RadioButton) findViewById(checkedId);
Toast.makeText(getApplicationContext(), "you selected "+rb.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
rb1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
RadioButton rb = (RadioButton) buttonView;
Toast.makeText(getApplicationContext(), "you selected "+rb.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
btn1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
RadioButton rb = (RadioButton) findViewById(rg1.getCheckedRadioButtonId());
Toast.makeText(getApplicationContext(), "you selected "+rb.getText().toString(), Toast.LENGTH_SHORT).show();
}
});
}
} }