Android 基础知识4-3.6 ToggleButton(开关按钮)Switch(开关)详解

news2024/11/17 19:29:28

一、ToggleButton(开关按钮)

1.1、简介

        ToggleButton 类似开关有开和关两种状态,不同的状态下可以有不同的文本。

        public class ToggleButton extends CompoundButton
        Displays checked/unchecked states as a button with a "light" indicator and by default accompanied with the text "ON" or "OFF"。

        这是一种特殊的有两种状态的继承至CompoundButton的控件,在不同的状态会有高亮显示效果,既然是继承至CompoundButton,那我们也随便看一下CompoundButton的介绍:

 A button with two states, checked and unchecked. When the button is pressed
 or clicked, the state changes automatically.

1.2、属性

android:checked = “true”

默认为选中状态,反之false即是默认为非选中状态。

android:textOff = “张起灵” 未选中状态下的文本是张起灵

android:textOn = “张无忌” 选中状态下的文本是张无忌

1.3.1、示例1

效果图:

XML:

<ToggleButton
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="ToggleButton"
    android:textAllCaps="false"
    android:textOff="张起灵"
    android:textOn="张无忌" />

1.3.2、示例2

        同样的,我们可以监听不同的状态来设置不同的背景,来适配不同的使用场景,这个背景设置和Button中的一模一样。只是针对的状态不同而已,记得在Button中,我们的Drawable如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/colorAccent"></item>
    <item android:state_pressed="false" android:drawable="@color/colorPrimary"></item>
</selector>

在我们的ToggleButton中,我们的背景Drawable如下:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/open"></item>
    <item android:state_checked="false" android:drawable="@drawable/close"></item>
</selector>

可见,都是根据控件状态来切换照片,只是对应的状态不同罢了。运行的效果如下:

        在上面我们也说了,这个控件通常对应两种状态,那么如何监听状态的变化了,我们可以通过其父类CompoundButton.OnCheckedChangeListener接口实现,具体代码如下:

//设置状态变化监听
        toggleButton.setOnCheckedChangeListener(new         CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(isChecked){
 
                }else {
 
                }
            }
        });

这样,我们就可以在不同状态下处理不同的逻辑了。

二、Switch(开关)

 2.1 简介

        Switch是一个可以再两种状态切换的开关控件。用户可以拖动来选择,也可以像选择复选框一样点击切换Switch的状态

2.2 属性

android:showText:设置on/off的时候是否显示文字,boolean
android:splitTrack:是否设置一个间隙,让滑块与底部图片分隔,boolean
android:switchMinWidth:设置开关的最小宽度
android:switchPadding:设置滑块内文字的间隔
android:switchTextAppearance:设置开关的文字外观,暂时没发现有什么用…
android:textOff:按钮没有被选中时显示的文字
android:textOn:按钮被选中时显示的文字
android:textStyle:文字风格,粗体,斜体写划线那些
android:track:底部的图片
android:thumb:滑块的图片
android:typeface:设置字体,默认支持这三种:sans, serif, monospace;除此以外还可以使用
其他字体文件(*.ttf),首先要将字体文件保存在assets/fonts/目录下,不过需要在Java代码中设置:
**Typeface typeFace =Typeface.createFromAsset(getAssets(),”fonts/HandmadeTypewriter.ttf”);
textView.setTypeface(typeFace);

在代码中也可以改变该组件的外观:
setSwitchTextAppearance(Context context, int resid) 使用指定的资源id设置状态标签上的文字大小,类型,颜色等;
setSwitchTypeface(Typeface tf, int style)  使用指定的字体类型库内的指定类型来设置状态标签上的文字;
setSwitchTypeface(Typeface tf) 使用指定字体类型库内的固有类型来设置状态标签上的文字;
setTextOff(CharSequence textOff) 设置“关闭”状态标签文字;
setTextOn(CharSequence textOn) 设置“开启”状体标签文字;
父类内的setButtonDrawable(int resid) 用指定的资源id设置组件背景;
父类内的setButtonDrawable(Drawable d) 用可绘制对象设置组件背景;
android:textStyle 和android:typeface 与setSwitchTypeface(Typeface tf)对应;

2.3 使用示例

2.3.1  示例1

效果图:

     <Switch
                android:layout_marginRight="@dimen/dp_16"
                android:layout_centerVertical="true"
                android:layout_alignParentRight="true"
                android:thumb="@drawable/shape_thumb"
                android:track="@drawable/shape_track"
                android:layout_width="wrap_content"
                android:layout_height="@dimen/dp_10"/>

shape_thumb:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
 
    <size android:height="20dp" android:width="20dp"/>
 
    <!-- 圆角弧度 20 -->
 
    <corners android:radius="5dp"/>
 
    <solid android:color="#ffffff" />
    <stroke android:width="1dp"
        android:color="#4AA361"/>
 
</shape>

shape_track:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
 
    <!-- 这个基本没有用-->
    <size android:height="15dp" android:width="30dp"/>
    <!-- 圆角弧度 20 -->
    <corners android:radius="20dp"/>
 
    <solid android:color="#4AA361" />
 
</shape>

2.3.2  示例2

        因为比较简单,所以我们把他们写到一起,另外,我们为Switch设置下滑块和底部的图片,实现一个类似于IOS 7的滑块的效果,但是有个缺点就是不能在XML中对滑块和底部的大小进行设置,就是素材多大,Switch就会多大,我们可以在Java中获得Drawable对象,然后对大小进行修改,简单的例子:

实现代码:
先是两个drawable的文件:
thumb_selctor.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@drawable/switch_btn_pressed"/>
    <item android:state_pressed="false" android:drawable="@drawable/switch_btn_normal"/>
</selector>

track_selctor.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true" android:drawable="@drawable/switch_btn_bg_green"/>
    <item android:state_checked="false" android:drawable="@drawable/switch_btn_bg_white"/>
</selector>

布局文件:activity_main.xml:

<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"
    tools:context=".MainActivity">

    <ToggleButton
        android:id="@+id/tbtn_open"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="true"
        android:textOff="关闭声音"
        android:textOn="打开声音" />

    <Switch
        android:id="@+id/swh_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textOff=""
        android:textOn=""
        android:thumb="@drawable/thumb_selctor"
        android:track="@drawable/track_selctor" />

</LinearLayout>


MainActivity.java:

public class MainActivity extends AppCompatActivity implements CompoundButton.OnCheckedChangeListener{

    private ToggleButton tbtn_open;
    private Switch swh_status;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        tbtn_open = (ToggleButton) findViewById(R.id.tbtn_open);
        swh_status = (Switch) findViewById(R.id.swh_status);
        tbtn_open.setOnCheckedChangeListener(this);
        swh_status.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
        switch (compoundButton.getId()){
            case R.id.tbtn_open:
                if(compoundButton.isChecked()) Toast.makeText(this,"打开声音",Toast.LENGTH_SHORT).show();
                else Toast.makeText(this,"打开声音",Toast.LENGTH_SHORT).show();
                break;
            case R.id.swh_status:
                if(compoundButton.isChecked()) Toast.makeText(this,"开关:ON",Toast.LENGTH_SHORT).show();
                else Toast.makeText(this,"开关:OFF",Toast.LENGTH_SHORT).show();
                break;

        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/390404.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CNN基础

Tip&#xff1a;仅供自己学习记录&#xff0c;酌情参考 1. 前馈与反馈神经网络 神经网络有前馈神经网络和反馈神经网络&#xff0c;前向神经网络也就是前馈神经网络。 前馈型神经网络各神经元接收前一层的输入&#xff0c;并输出给下一层&#xff0c;没有反馈。节点分为两类…

nacos-sdk-rust binding to NodeJs

广告时间 nacos-sdk-rust-binding-node : nacos-sdk-rust binding to NodeJs with napi. Tip: nacos-sdk-nodejs 仓库暂未提供 2.x gRPC 交互模式&#xff0c;为了能升级它&#xff0c;故而通过 node addon 方式调用 nacos-sdk-rust npm 包 -> https://www.npmjs.com/packa…

Spring系列-8 AOP使用与原理

背景 按照软件重构的思想&#xff0c;当多个类中存在相同的代码时&#xff0c;需要提取公共部分来消除代码坏味道。Java的继承机制允许用户在纵向上通过提取公共方法或者公共部分(模版方法方式)至父类中以消除代码重复问题&#xff1b;日志、访问控制、性能监测等重复的非业务…

GO的IO接口和工具

GO的IO接口和工具 文章目录GO的IO接口和工具一、io包中接口的好处和优势1.1拷贝数据的函数二、 在io包中&#xff0c;io.Reader 的扩展接口和实现类型都有哪些2.1 io.Reader的扩展接口2.2 io.Reader接口的实现类型2.3 示例三、io包的接口&#xff0c;以及它们之间的关系3.1 读操…

Raki的读paper小记:Forget-free Continual Learning with Winning Subnetworks

Abstract&Introduction&Related Work 研究任务 用子网络做CL已有方法和相关工作 彩票假说&#xff08;LTH&#xff09;证明了稀疏子网络&#xff08;称为中奖彩票&#xff09;的存在&#xff0c;这些子网络保持了密集网络的性能&#xff0c;然而使用迭代修剪方法在持续…

Splunk 的一个Bug (Events from tracker.log have not been seen)

1:背景:Splunk version: 8.2.4 splunk 的一个alert: Events from tracker.log have not been seen for the last 47 seconds, which is more than the yellow threshold (45 seconds). This typically occurs when indexing or forwarding are falling behind or are blocked…

【15】linux命令每日分享——head命令查看文件

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

德鲁特金属导电理论(Drude)

德鲁特模型的重要等式 首先我们建立德鲁特模型的重要等式 我们把原子对于电子的阻碍作用&#xff0c;用一个冲量近似表示出来 在式子 首先定义一个等效加速度 由于 我们可以得到电导率的微观表达式 在交流电环境中 电场的表达式 借鉴上一问的公式 我们可以列出这样的表达式…

1.5 全概率公式和贝叶斯公式

1.5.1 全概率公式在处理复杂事件的概率时&#xff0c;我们经常将这个复杂事件分解为若千个互不相容的较简单的事件之和&#xff0c;先求这些简单事件的概率&#xff0c;再利用有限可加性得到所求事件的概率,这种方法就是全概率公式的思想方法全概率公式是概率论中的一个非常重要…

【CSS】CSS 复合选择器 ② ( 子元素选择器 | 交集选择器 )

文章目录一、子元素选择器1、语法说明2、代码分析3、代码示例二、交集选择器1、语法说明2、代码示例一、子元素选择器 1、语法说明 子元素选择器 可以选择 某个基础选择器 选择出的 元素组 的 直接子元素 ( 亲儿子元素 ) 中 使用基础选择器 选择 元素 ; 子元素选择器语法 : 父选…

【JAVA程序设计】(C00112)基于Springboot+Thymeleaf的在线购物商城——有文档

基于SpringbootThymeleaf的在线购物商城——有文档项目简介项目获取开发环境项目技术运行截图运行视频项目简介 基于Springbootthymeleaf框架的在线购物商城系统&#xff0c;本系统共分为二个角色&#xff1a;管理员和用户 管理员角色包含以下功能&#xff1a; 商品管理、商品…

DELL-Vostro-5468电脑 Hackintosh 黑苹果efi引导文件

原文来源于黑果魏叔官网&#xff0c;转载需注明出处。硬件型号驱动情况主板DELL-Vostro-5468处理器Intel Core i3-7100U 2.40 GHz, 3M Cache已驱动内存Samsung 8GB DDR4-2133MHz已驱动硬盘TOPMORE CAPRICORNUS NVMe 1TB已驱动显卡Intel HD Graphics 620已驱动声卡Realtek ALC2…

Linux指令——文件与权限

一&#xff0c;文件目录管理命令 ls 命令描述&#xff1a; ls命令用于显示指定工作目录下的内容。 命令格式&#xff1a;ls [参数] [目录名]。 参数说明&#xff1a; 参数 说明 -a 显示所有文件及目录&#xff08;包括隐藏文件&#xff09; -l 将文件的权限、拥有者、…

详解七大排序算法

对于排序算法&#xff0c;是我们在数据结构阶段&#xff0c;必须要牢牢掌握的一门知识体系&#xff0c;但是&#xff0c;对于排序算法&#xff0c;里面涉及到的思路&#xff0c;代码……各种时间复杂度等&#xff0c;都需要我们&#xff0c;记在脑袋瓜里面&#xff01;&#xf…

【LeetCode每日一题】——680.验证回文串 II

文章目录一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【解题思路】七【题目提示】八【时间频度】九【代码实现】十【提交结果】一【题目类别】 贪心算法 二【题目难度】 简单 三【题目编号】 680.验证回文串 II 四【题目描述】 给你一个字…

终端仿真器、协议分析器和 IO 监视器:IO Ninja 5.3.1 Crack

欢迎使用 IO Ninja 您的一站式终端仿真器、协议分析器和 IO 监视器 IO Ninja是一款专业的一体化终端仿真器、嗅探器和协议分析器。IO Ninja 是高度模块化的&#xff0c;并且具有适用于您可能跨越的大多数传输和协议的插件——网络&#xff08;、、、、、等&#xff09;、串行&…

实验3 设计模式实验2

实验内容: 1. 某Web 性能测试软件中包含一个虚拟用户生成器(Virtual User Generator)。 为了避免出现生成的虚拟用户数量不一致&#xff0c;该测试软件在工作时只允许启动唯一 一个虚拟用户生成器。采用单例模式设计该虚拟用户生成器&#xff0c;绘制类图并使用饿 汉式单例、双…

汇编语言程序设计(四)之汇编指令

系列文章 汇编语言程序设计&#xff08;一&#xff09; 汇编语言程序设计&#xff08;二&#xff09;之寄存器 汇编语言程序设计&#xff08;三&#xff09;之汇编程序 汇编指令 1. 数据传输指令 指令包括&#xff1a;MOV、XCHG、XLAT、LEA、LDS、LES、PUSH、POP、PUSHF、LA…

关闭应用程序遥测,禁止Windows收集用户信息

目录 1. 先创建还原点&#xff0c;防止意外 2. 界面设置 3. 服务 (1) GPEdit.msc - 本地计算机策略 - 计算机配置 - 管理模板 - Windows 组件 - 应用程序兼容性 - 关闭应用程序遥测 - 已启用 (2) GPEdit.msc - 本地计算机策略 - 计算机配置 - 管理模板 - Windows 组件 - 数…

aws apigateway 使用restapi集成lambda

参考资料 代理集成&#xff0c;https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html非代理集成&#xff0c;https://docs.aws.amazon.com/zh_cn/apigateway/latest/developerguide/getting-started-…