Android UI系列-----CheckBox和RadioButton(1)
主要记录一下CheckBox多选框和RadioGroup、RadioButton单选框的设置以及注册监听器
1.CheckBox
布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:orientation="vertical" tools:context=".MainActivity" > <CheckBox android:id="@+id/eatId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="吃饭"/> <CheckBox android:id="@+id/sleepId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="睡觉"/> <CheckBox android:id="@+id/playId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="玩游戏"/> <CheckBox android:id="@+id/allId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选"/> </LinearLayout>
MainActivity:
public class MainActivity extends Activity { private CheckBox eatBox; private CheckBox sleepBox; private CheckBox playBox; private CheckBox allBox; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); eatBox = (CheckBox) findViewById(R.id.eatId); sleepBox = (CheckBox) findViewById(R.id.sleepId); playBox = (CheckBox) findViewById(R.id.playId); allBox = (CheckBox) findViewById(R.id.allId); // OnBoxClickListener listener = new OnBoxClickListener(); // OnBoxCheckedListener listener2 = new OnBoxCheckedListener(); CheckedBoxListener listener3 = new CheckedBoxListener(); // eatBox.setOnClickListener(listener); // sleepBox.setOnClickListener(listener); // playBox.setOnClickListener(listener); eatBox.setOnCheckedChangeListener(listener3); sleepBox.setOnCheckedChangeListener(listener3); playBox.setOnCheckedChangeListener(listener3); allBox.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { eatBox.setChecked(isChecked); sleepBox.setChecked(isChecked); playBox.setChecked(isChecked); } }); } class CheckedBoxListener implements OnCheckedChangeListener { private int count = 0; @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (isChecked) { count++; if (count == 3) { allBox.setChecked(isChecked); } } else { count--; allBox.setChecked(isChecked); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } // CheckBox点击监听器 class OnBoxClickListener implements OnClickListener { @Override public void onClick(View view) { CheckBox box = (CheckBox) view; if (box.getId() == R.id.eatId) { System.out.println("eatBox"); } else if (box.getId() == R.id.sleepId) { System.out.println("sleepBox"); } else if (box.getId() == R.id.playId) { System.out.println("playBox"); } if (box.isChecked()) { System.out.println("Box is checked"); } else { System.out.println("Box is unChecked"); } System.out.println("CheckBox is clicked!"); } } // CheckBox状态改变监听器 class OnBoxCheckedListener implements OnCheckedChangeListener { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { CheckBox box = (CheckBox) buttonView; if (box.getId() == R.id.eatId) { System.out.println("eatBox"); } else if (box.getId() == R.id.sleepId) { System.out.println("sleepBox"); } else if (box.getId() == R.id.playId) { System.out.println("playBox"); } if (isChecked) { System.out.println(box.getText() + " is checked!"); } else { System.out.println(box.getText() + " is unchecked!"); } } } }
2.RadioGroup和RadioButton
RadioGroup中可以放置多个RadioButton单选框,位于同一RadioGroup中的RadioButton每次只能选择一个
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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" tools:context=".MainActivity" > <RadioGroup android:id="@+id/radioGroupId1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/femailButtonId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="女"/> <RadioButton android:id="@+id/maleButtonId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="男"/> </RadioGroup> <RadioGroup android:id="@+id/raidoGroupId2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/womenButtonId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="women"/> <RadioButton android:id="@+id/manButtonId" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="man"/> </RadioGroup> </LinearLayout>
MainActivity:
public class MainActivity extends Activity
{
private RadioGroup radioGroup;
private RadioButton femaleRadio;
private RadioButton maleRadio;
private RadioGroup radioGroup2;
private RadioButton womenRadio;
private RadioButton manRadio;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radioGroup = (RadioGroup)findViewById(R.id.radioGroupId1);
femaleRadio = (RadioButton)findViewById(R.id.femailButtonId);
maleRadio = (RadioButton)findViewById(R.id.maleButtonId);
radioGroup2 = (RadioGroup)findViewById(R.id.raidoGroupId2);
womenRadio = (RadioButton)findViewById(R.id.womenButtonId);
manRadio = (RadioButton)findViewById(R.id.manButtonId);
RadioGroupListener listener = new RadioGroupListener();
radioGroup.setOnCheckedChangeListener(listener);
radioGroup2.setOnCheckedChangeListener(listener);
}
class RadioGroupListener implements OnCheckedChangeListener
{
@Override
public void onCheckedChanged(RadioGroup group, int checkedId)
{
if(checkedId == femaleRadio.getId() || checkedId == womenRadio.getId())
{
womenRadio.setChecked(true);
femaleRadio.setChecked(true);
System.out.println("femaleRadio is cheched!");
}
else if(checkedId == maleRadio.getId() || checkedId == manRadio.getId())
{
manRadio.setChecked(true);
maleRadio.setChecked(true);
System.out.println("maleRadio is checked!");
}
}
}
class RadioButtonListener implements android.widget.CompoundButton.OnCheckedChangeListener
{
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked)
{
if(isChecked)
{
System.out.println("RadioButton is checked!");
}
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
注意:我们可以给RadioGroup注册一个OnCheckedChangeListener,引用的是android.widget.RadioGroup.OnCheckedChangeListener这个包下的监听器,其里面的方法是:
// group表示当前选中的这一组的RadioGroup对象,checkId表示的是当前这组中选中的那个单选框的ID
public void onCheckedChanged(RadioGroup group, int checkedId) { if(checkedId == femaleRadio.getId() || checkedId == womenRadio.getId()) { womenRadio.setChecked(true); femaleRadio.setChecked(true); System.out.println("femaleRadio is cheched!"); } else if(checkedId == maleRadio.getId() || checkedId == manRadio.getId()) { manRadio.setChecked(true); maleRadio.setChecked(true); System.out.println("maleRadio is checked!"); } }
而我们还可以给每个RadioButton注册一个OnCheckedChangeListener,但是这里就要使用 android.widget.CompoundButton.OnCheckedChangeListener 这个监听器类,其里面的方法:
// buttonView表示的就是当前调用这个方法的那个RadioButton对象,isChecked表示当前是否为选择
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if(isChecked) { System.out.println("RadioButton is checked!"); } }