Android widget之CompoundButton[通俗易懂]

发布时间:2025-12-09 13:48:11 浏览次数:4

简介

具有两个状态的按钮,已选中或未选中。当按下或点击按钮时,状态会自动更改。

  • 直接继承至Button
  • 直接子类
    1. CheckBox
    2. RadioButton
    3. Switch
    4. SwitchCompat
    5. ToggleButton
  • 间接子类
    1. AppCompatCheckBox
    2. AppCompatRadioButton

使用

相比较Button而言多出了一个监听事件(接口)

CompoundButton.OnCheckedChangeListener

当复合按钮的检查状态发生变化时调用。

实现方法:onCheckedChanged( CompoundButton buttonView,boolean isChecked)

  • buttonView 复合按钮视图的状态。
  • isChecked buttonView的新状态。

公共方法

简单介绍几个常用的

  • isChecked() — 获取当前状态
  • performClick() — 调用此视图的OnClickListener(如果已定义)
  • setChecked(boolean checked) — 更改这个按钮的状态
  • setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener listener)
    当这个按钮的检查状态发生变化时,注册一个回调
  • toggle() — 将视图的状态更改为当前状态的逆(反向)

子类

CheckBox

复选框:可以选中或取消选中的特定类型的双状态按钮。

例:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:andro android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">    <CheckBox android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/meat" android:onClick="onCheckboxClicked"/>    <CheckBox android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/cheese" android:onClick="onCheckboxClicked"/></LinearLayout>
public void onCheckboxClicked(View view) {    // Is the view now checked?    boolean checked = ((CheckBox) view).isChecked();    // Check which checkbox was clicked    switch(view.getId()) {        case R.id.checkbox_meat:            if (checked)                // Put some meat on the sandwich            else                // Remove the meat            break;        case R.id.checkbox_cheese:            if (checked)                // Cheese me            else                // I'm lactose intolerant            break;        // TODO: Veggie sandwich    }}
public class MyActivity extends Activity {         protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.content_layout_id);         final CheckBox checkBox = (CheckBox) findViewById(R.id.checkbox_id);         if (checkBox.isChecked()) {             checkBox.setChecked(false);         }     } }

注:AppCompatCheckBox作为其子类用法差别不大!

RadioButton

单选按钮:是可以选中或取消选中的双状态按钮。当单选按钮被取消选中时,用户可以单击来选中它。

  • 注:单选按钮通常与RadioGroup在一起使用。当多个单选按钮在RadioGroup内时,检查一个单选按钮将取消选中所有其他单选按钮。
<?xml version="1.0" encoding="utf-8"?><RadioGroup xmlns:andro android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical">    <RadioButton android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/pirates" android:onClick="onRadioButtonClicked"/>    <RadioButton android: android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/ninjas" android:onClick="onRadioButtonClicked"/></RadioGroup>
public void onRadioButtonClicked(View view) {    // Is the button now checked?    boolean checked = ((RadioButton) view).isChecked();    // Check which radio button was clicked    switch(view.getId()) {        case R.id.radio_pirates:            if (checked)                // Pirates are the best            break;        case R.id.radio_ninjas:            if (checked)                // Ninjas rule            break;    }}

注:AppCompatRadioButton作为其子类用法差别不大!

Switch

开关:是一个双状态切换开关小部件,可以在两个选项之间进行选择。用户可以来回拖动“拇指”来选择所选择的选项,或者只需轻按以切换,就像复选框一样。该text 属性控制交换机标签中显示的文本,而 文本off和on文本控制拇指上的文本。

xml属性公共方法作用效果
android:showTextsetShowText(boolean)是否显示 打开/关闭 文本
android:textOffsetTextOff(CharSequence)当开关处于 关闭 状态时使用的文本
android:textOnsetTextOn(CharSequence)当开关在 开打 状态时使用的文本
android:tracksetTrackResource(int)开关拇指滑动的“轨迹”

ToggleButton

显示 打开/关闭 的状态的按钮,默认情况下伴随文本“ON”或“OFF”。

与Switch差别不大!

知识不够用?

http://android.xsoftlab.net/reference/android/widget/CompoundButton.html


知识贵在分享!

需要做网站?需要网络推广?欢迎咨询客户经理 13272073477