news 2026/4/23 12:56:11

​ Android 基础入门教程​之开关按钮ToggleButton和开关Switch

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
​ Android 基础入门教程​之开关按钮ToggleButton和开关Switch

2.3.6 开关按钮ToggleButton和开关Switch

分类Android 基础入门教程

本节引言:

本节给大家介绍的Android基本UI控件是:开关按钮ToggleButton和开关Switch,可能大家对着两个组件 并不熟悉,突然想起笔者的第一间外包公司,是否在wifi下联网的开关,竟然用的TextView,然后叫美工 且两个切换前后的图,然后代码中进行设置,当然点击TextView的时候判断状态,然后设置对应的背景...

好吧,也是醉了,好吧...本节讲解的两个其实都是开关组件,只是后者需要在Android 4.0以后才能使用 所以AndroidManifest.xml文件中的minsdk需要 >= 14 否则会报错~,先来看看这两个控件长什么样先, Android 5.0后这两个控件相比以前来说好看了许多,先看下5.0前的样子:

5.0以前的ToggleButton和Switch:

5.0版本:

好吧,鲜明的对比...接下来我们就来学习者两个控件的使用吧,其实两个的使用几乎是相同的。

开始之前贴下官方API先:Switch;ToggleButton


1.核心属性讲解:

1)ToggleButton(开关按钮)

可供我们设置的属性:

  • android:disabledAlpha:设置按钮在禁用时的透明度
  • android:textOff:按钮没有被选中时显示的文字
  • android:textOn:按钮被选中时显示的文字 另外,除了这个我们还可以自己写个selector,然后设置下Background属性即可~

2) Switch(开关)

可供我们设置的属性:

  • 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);

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; } } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 10:44:14

SuperMap Hi-Fi 3D SDK for Unreal 如何修改模型选中高亮颜色

目录 一、前言 二、通过界面修改模型选中高亮颜色 1. 设置鼠标浏览模式 2. 设置模型选中高亮颜色 三、通过蓝图修改模型选中高亮颜色 一、前言 在使用 SuperMap Hi-Fi 3D SDK for Unreal 时&#xff0c;如果觉得模型选中时的高亮颜色不合适&#xff0c;该怎么修改&#xff1…

作者头像 李华
网站建设 2026/4/22 15:28:09

【Docker安全防护终极指南】:eBPF如何重塑容器安全边界?

第一章&#xff1a;Docker安全防护的现状与挑战随着容器技术在生产环境中的广泛应用&#xff0c;Docker已成为现代应用部署的核心组件之一。然而&#xff0c;其轻量、快速的特性也带来了新的安全挑战。由于容器共享宿主机内核&#xff0c;一旦发生逃逸攻击&#xff0c;可能直接…

作者头像 李华
网站建设 2026/4/23 10:44:35

Dify DOCX处理速度翻倍技巧大公开,90%的人都忽略了第3步

第一章&#xff1a;Dify DOCX处理速度翻倍的核心原理Dify 在处理 DOCX 文档时实现性能翻倍&#xff0c;关键在于其异步流式解析与智能缓存机制的深度整合。传统 DOCX 处理通常采用全量加载方式&#xff0c;将整个文档解压并载入内存&#xff0c;导致高延迟和资源浪费。Dify 通过…

作者头像 李华
网站建设 2026/4/23 12:20:27

【Dify响应容错处理核心指南】:掌握高可用系统设计的5大黄金法则

第一章&#xff1a;Dify响应容错处理概述在构建高可用的AI应用时&#xff0c;Dify作为低代码平台需要具备强大的响应容错能力&#xff0c;以应对模型调用失败、网络波动或服务降级等异常场景。良好的容错机制不仅能提升系统稳定性&#xff0c;还能保障用户体验的一致性。容错的…

作者头像 李华
网站建设 2026/4/23 1:43:28

Dify文档保存失败?立即检查这4个路径设置关键项

第一章&#xff1a;Dify文档保存失败&#xff1f;问题初探与现象分析在使用 Dify 构建 AI 应用时&#xff0c;部分用户反馈在编辑或创建文档过程中遭遇“保存失败”的异常现象。该问题表现为点击保存按钮后无响应、提示网络错误或返回 500 状态码&#xff0c;严重影响开发效率与…

作者头像 李华
网站建设 2026/4/23 10:16:06

Dify API权限审计难?掌握这4个监控指标,安全合规无忧

第一章&#xff1a;Dify API权限控制的核心挑战 在构建基于 Dify 的 AI 应用时&#xff0c;API 权限控制是保障系统安全与数据隔离的关键环节。随着多租户、多角色架构的普及&#xff0c;如何精确管理用户对 API 的访问权限成为开发团队面临的主要难题。 细粒度权限划分的复杂…

作者头像 李华