3.2单选和开关

相同点:  

RadioButton(单选按钮)、CheckBox(复选按钮)、ToggleButton(开关按钮)都继承自android.widget.CompoundButton类,而CompoundButton又继承自Button类,在这个类中封装了一个checked属性,用于判断是否被选中,这也是它与Button的不同,对其进行了扩展,这个属性在这三个控件中的用法是一样的。

  一般checked属性通过以下方式来设置与获取:

  • android:checked/setChecked(boolean):设置是否被选中。
  • isChecked():获取是否被选中。

不同点:

1.RadioButton:单选按钮,2个或大于2个的单选框,一般配合RadioGroup一起使用,在同一RadioGroup内,所有的RadioButton的选中状态为互斥,它们有且只有一个RadioButton被选中,但是在不同的RadioGroup中是不相互影响的。

2.Switch:开关(新:Android 4.0 (API level 14) 上),相当于一个textview加一个是否的单选框(一个文字显示+开关按钮),有两个状态,大抵的用法与上面两个控件一直,可以通过两个属性显示不同状态时,控件内显示文字的内容不同,属性如下:

  • android:textOff/setTextOff(CharSequence):设置关闭时显示内容。
  • android:textOn/setTextOn(CharSequence):设置打开时显示内容。

有一个OnCheckedChangeListener()事件,当开关的状态切换的时候会被触发,其中需要传递一个OnCheckedChangeListener接口的实现内,当被切换时,触发其中的onCheckedChange()方法,可以在其中写需要实现的功能代码。

3.ToggleButton:开关(老::Android 4.0 (API level 14) 下),相当于是否的单选框,同2

界面:

布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="com.liang.radioswitchtoggle.MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:text="Sex:"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignBottom="@+id/textView"
        android:layout_marginStart="16dp"
        android:layout_toEndOf="@+id/textView"
        android:orientation="horizontal">

        <RadioButton
            android:id="@+id/rbmale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="false"
            android:onClick="radioclick"
            android:text="male" />

        <RadioButton
            android:id="@+id/rbfemale"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="false"
            android:onClick="radioclick"
            android:text="female" />

        <RadioButton
            android:id="@+id/rbsecret"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:checked="false"
            android:onClick="radioclick"
            android:text="secret" />
    </RadioGroup>

    <Switch
        android:id="@+id/switch1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/textView"
        android:layout_marginTop="60dp"
        android:checked="false"
        android:text="新开关"
        android:textOff="关"
        android:textOn="开" />
    <!--android:onClick="switchclick"
          android:checked="false" />-->

    <ToggleButton
        android:id="@+id/toggleButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/switch1"
        android:layout_marginTop="53dp"
        android:onClick="toggleclick"
        android:text="旧开关"
        android:textOff="关"
        android:textOn="开" />

</RelativeLayout>

代码:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.RadioButton;
import android.widget.Switch;
import android.widget.Toast;
import android.widget.ToggleButton;

public class MainActivity extends AppCompatActivity {
    private Switch aSwitch;
    private ToggleButton toggleButton;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       //方法一 监听
       aSwitch = (Switch) this.findViewById(R.id.switch1);
        aSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                //buttonView.getText()前面的文字 不是开关on/off上的文字
                if (isChecked) {
                    Toast.makeText(MainActivity.this, buttonView.getText()+" is "+aSwitch.getTextOn().toString(), 1).show();
                } else {
                    Toast.makeText(MainActivity.this, buttonView.getText()+" is "+isChecked, 1).show();
                }
            }
        });

        /*toggleButton= (ToggleButton) this.findViewById(R.id.toggleButton);
        toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    Toast.makeText(MainActivity.this, buttonView.getText()+" is "+isChecked, 1).show();
                } else {
                    Toast.makeText(MainActivity.this, buttonView.getText()+" is "+isChecked, 1).show();
                }
            }
        });*/
    }

    //需要强转
    public void radioclick(View view) {
        RadioButton rb = (RadioButton) view;
        boolean isChecked = rb.isChecked();
        switch (view.getId()) {
            case R.id.rbmale:
                if (isChecked) {
                    Toast.makeText(MainActivity.this, rb.getText() + " true", 1).show();
                } else {
                    //单选 没有false的情况
                    Toast.makeText(MainActivity.this, "没有false的情况", 1).show();
                }
                break;
            case R.id.rbfemale:
                if (isChecked) {
                    Toast.makeText(MainActivity.this, "female true", 1).show();
                }
                break;
            case R.id.rbsecret:
                Toast.makeText(MainActivity.this, "secret " + isChecked, 1).show();
                break;
        }
    }
    //方法二 xml的onclick
/*    public void switchclick(View view) {
        Switch s = (Switch) view;
        boolean ischecked = s.isChecked();
        if (ischecked) {
            Toast.makeText(MainActivity.this, s.getText() +" is "+ ischecked, 1).show();
        } else {
            Toast.makeText(MainActivity.this, s.getTextOff().toString() +" is "+ ischecked, 1).show();
        }
    }*/

    public void toggleclick(View view) {
        ToggleButton t = (ToggleButton) view;
        boolean ischecked = t.isChecked();
        //getTextOn()或者getTextOff().toString()和getText()值一样
        if (ischecked) {
            Toast.makeText(MainActivity.this, t.getTextOn().toString() +" is "+ ischecked, 1).show();
        } else {
            Toast.makeText(MainActivity.this, t.getText() +" is "+ ischecked, 1).show();
        }
    }

}
时间: 2024-10-03 13:02:17

3.2单选和开关的相关文章

CSS学习笔记三:自定义单选框,复选框,开关

一点一点学习CCS,这次学习了如何自定义单选框,复选框以及开关. 一.单选框 1.先写好body里面的样式,先写几个框 1 <body> 2 <div class="radio-1"> 3 <input type="radio" name="radio-1" id="radio-1-1"> 4 <label for="radio-1-1"></label

[CSS揭秘]自定义单选框和复选框

很多Web前端工程师肯定都会遇到过,在项目中,UI设计师跑来跟你说,我这个地方的表单控件需要设计成这个样子那个样子.但是用CSS却不能够修改这些控件的默认样式,于是乎,只能通过div+javascript技术来进行模拟.特别是在如今移动端的崛起时代,更加注重用户的体验.于是就更加需要这样一种hack技术. 如果对如今的前端框架有过了解,都会知道组件这个概念.那么在这些框架中,都会提供一些单选框或复选框按钮组件.可见大家之前受到表单元素的默认样式的毒害有多深. 今天先给大家简单介绍一下如何通过CS

加监听器,单选复选按钮

MainActivity package com.example.lenovo.myapplication; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.widget.CheckBox; import android.widget.CompoundButton; import android

MUI组价五:开关、底部选项卡、9宫格和分页

1.switch(开关) mui提供了开关控件,点击滑动两种手势都可以对开关控件进行操作,UI如下:默认开关控件,带on/off文字提示,打开时为绿色背景,基本class类为.mui-switch..mui-switch-handle,DOM结构如下: <div class="mui-switch"> <div class="mui-switch-handle"></div> </div> 若希望开关默认为打开状态,只

依赖layui form模块 复选框tree插件(拓展可根据属性单选还是多选,数据反选)

近些天接的项目用的是layui.以前没用过,踩了很多坑,坑就不多说了,直接说layui的tree.因为自带的tree不满足需求,所以在论坛.博客上找了很久终于找到了可以复选的的插件,原文地址:https://blog.csdn.net/xianglikai1/article/details/79032278.这里谢谢原作者,从源码中学到了很多. 这里我就直接上代码了.(注:因为数据结构问题我将源码中的json数据结构title改为id,value改为name.勾选树的获取值未变:data.val

layui 单选框选中事件

<div class="layui-form-item" pane=""> <label class="layui-form-label">节点</label> <div class="layui-input-block"> <input type="radio" name="sex" value="左节点" ti

学习15 单选框/多选框标签

<!doctype html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>单选框/复选框</title> </head> <body> <form action="save.php" method="p

微信小程序组件解读和分析:十三、radio单选项目

radio单选项目组件说明: radio:单选项目. radio-group: 单项选择器,内部由多个<radio/>组成. radio单选项目示例代码运行效果如下: 下面是WXML代码: [XML] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 <view class="page">   <view class="page__hd">     <text

基于Redis bitmap实现开关配置功能

作者:zhanhailiang 日期:2014-12-21 bitmap api SETBIT key offset value 对key所储存的字符串值,设置或清除指定偏移量上的位(bit). 位的设置或清除取决于value参数,可以是0也可以是1. 当key不存在时,自动生成一个新的字符串值. 字符串会进行伸展(grown)以确保它可以将value保存在指定的偏移量上. 当字符串值进行伸展时,空白位置以0填充. offset参数必须大于或等于0,小于2^32(bit映射被限制在512MB之内