7.5 复选框
“复选框”有两个用途:一是多个“选项”,可以为用户提供多个选择项;二是单个“选项”,可以为用户提供两种状态切换的控件,类似于ToggleButton和Switch。
7.5.1 CheckBox
在Android中,“复选框”是CheckBox, CheckBox默认样式如图7-20所示。
图7-20 CheckBox默认样式
CheckBox对应类是android.widget.CheckBox,类图如图7-21所示,从图中可见android.widget.CheckBox继承了android.widget.Button,这说明CheckBox是一种按钮。CheckBox有一个特有属性android:checked,该属性设置CheckBox的选中状态。它是一个布尔值,true表示选中,false表示未选中。
图7-21 CheckBox类图
7.5.2 实例:使用复选框
图7-22是使用复选框实例,在屏幕上出现了4个CheckBox选项,可以单击进行选择。
图7-22 使用复选框实例
布局文件activity_main.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"> … <CheckBox android:id="@+id/CheckBox01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:checked="true" ① android:text="@string/checkBox01" android:textSize="@dimen/size"/> <CheckBox android:id="@+id/CheckBox02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/checkBox02" android:textSize="@dimen/size"/> <CheckBox android:id="@+id/CheckBox03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/checkBox03" android:textSize="@dimen/size"/> <CheckBox android:id="@+id/CheckBox04" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/checkBox04" android:textSize="@dimen/size"/> </LinearLayout>
在布局文件中声明了4个CheckBox,代码第①行android:checked="true"是设置CheckBox01复选框被选中。
MainActivity.java代码如下:
public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{ ① CheckBox mCheckbox1, mCheckbox2, mCheckbox3, mCheckbox4; TextView mTextView; @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView=(TextView) findViewById(R.id.TextView01); //注册CheckBox01 监听器 mCheckbox1 =(CheckBox) findViewById(R.id.CheckBox01); mCheckbox1.setOnCheckedChangeListener(this); ② //注册CheckBox2 监听器 mCheckbox2 =(CheckBox) findViewById(R.id.CheckBox02); mCheckbox2.setOnCheckedChangeListener(this); //注册CheckBox03 监听器 mCheckbox3 =(CheckBox) findViewById(R.id.CheckBox03); mCheckbox3.setOnCheckedChangeListener(this); //注册CheckBox04监听器 mCheckbox4 =(CheckBox) findViewById(R.id.CheckBox04); mCheckbox4.setOnCheckedChangeListener(this); } @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked){ ③ CheckBox ckb =(CheckBox)buttonView; mTextView.setText(ckb.getText()); } }
上述代码第①行是声明MainActivity实现CompoundButton.OnCheckedChangeListener接口,这样MainActivity就成为了CheckBox事件监听器,该接口要求实现代码第③行的onCheckedChanged方法。代码第②行注册当前MainActivity作为CheckBox01监听器,类似其他三个CheckBox都需要注册。
这4个CheckBox事件处理都是在代码第③行实现的onCheckedChanged方法中完成,如果每一个CheckBox处理不同,这需要判断是哪一个CheckBox,类似代码参考7.4.3节的RadioButton实例。
注意 CheckBox的事件处理要实现CompoundButton.OnCheckedChangeListener接口,这与RadioButton不同,RadioButton的事件处理者要实现的接口是RadioGroup. OnCheckedChangeListener。他们的事件源差别很大,CheckBox事件源是android. widget.CheckBox,而RadioButton的事件源是android.widget.RadioGroup,不是RadioButton。