使用 Jetpack Compose 构建 Switch

news2024/10/6 14:28:10

欢迎来到这篇关于如何使用 Jetpack Compose 构建 Switch(开关)的博客。Jetpack Compose 是 Google 的现代 UI 工具包,主要用于构建 Android 界面。它以声明式的方式简化了 UI 的开发。


一、什么是 Switch?

在 Android 中,Switch 是一个两态(开/关)的滑动式开关按钮,用户可以通过滑动或点击来改变它的状态。通常,我们会使用 Switch 来表示或改变某个二元设置的状态。

二、如何使用 Jetpack Compose 构建 Switch?

Jetpack Compose 提供了一个名为 Switch 的 composable 函数,用于创建 Switch。以下是一个简单的示例:

@Preview
@Composable
fun SwitchExample(){
    var switchState by remember {mutableStateOf(false)}

    Column( modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally){
        Switch(checked = switchState, onCheckedChange = {switchState =it},modifier= Modifier.padding(16.dp))
    Text(text = if(switchState) "Switch is ON" else "Switch is OFF")
    }
    
}

 

在这个例子中,我们首先创建了一个可观察的 switchState 状态,用于表示 Switch 的状态(开或关)。然后,我们创建了一个 Switch,它的 checked 属性与 switchState 相绑定,因此 Switch 的状态会根据 switchState 的值自动更新。

我们将 SwitchonCheckedChange 回调设为一个 lambda 表达式,这个表达式会在用户改变 Switch 的状态时被调用。在这个表达式中,我们将 switchState 更新为 Switch 的新状态。

最后,我们添加了一个 Text 用于显示 Switch 的当前状态。

三、自定义Switch

在Jetpack Compose中,你可以使用自定义的Composable代替默认的Switch组件,这样你就可以使用自己的图标或设计来替代默认的样式。

以下是一个自定义开关示例,使用IconButton和自定义的图标来实现:

@Preview
@Composable
fun CustomSwitchExample() {
    var switchState by remember { mutableStateOf(false) }

    Column(modifier = Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) {
        IconButton(
            onClick = { switchState = !switchState },
            modifier = Modifier.padding(16.dp)
        ) {
            Icon(
                imageVector = if (switchState) Icons.Default.Favorite else Icons.Default.FavoriteBorder,
                contentDescription = "Custom switch",
                tint = if (switchState) Color.Red else Color.Gray
            )
        }
        Text(if (switchState) "Switch is ON" else "Switch is OFF")
    }
}

 

 

在这个示例中,我们使用IconButtonIcon组件来创建自定义的开关。当switchStatetrue时,我们显示一个红色的Favorite图标;当switchStatefalse时,我们显示一个灰色的FavoriteBorder图标。IconButtononClick回调用于在用户点击时切换switchState的状态。

这只是一个简单的示例,你可以根据你的设计要求使用任何自定义的Composable或图标来创建开关。

总结

在这篇博客中,我们学习了如何使用 Jetpack Compose 构建 Switch。通过 Compose,我们可以更加直观和简洁地管理 UI 和状态,从而提高开发效率。希望这篇博客对你在学习 Jetpack Compose 的旅程上有所帮助!

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

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

相关文章

HOT27-合并两个有序链表

leetcode原题链接:合并两个有序链表 题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1: 输入:l1 [1,2,4], l2 [1,3,4] 输出:[1,1,2,3,4,4]示例 2&#xff1…

React修改Antd组件的样式

修改默认的antd组件&#xff0c;需要使用global import React, { useState, useEffect } from react; import { Tabs, Rate, Steps } from antd; import styles from ./index.less;const Index (props) >{return (<div className{styles.class_steps}><Stepsprog…

ATA-2161高压放大器在微流控技术细胞分选中的应用

高压放大器是一种专业的电子测试设备&#xff0c;用于将低电压信号放大为高电压信号。它在许多领域中被广泛应用&#xff0c;就例如微流控领域。今天我们就给大家分享一下ATA-2161高压放大器在微流控技术细胞分选中的应用。 本次实验我们会用到ATA-2161高压放大器、示波器、信号…

4、Redis7 十大数据类型总结与十大常见应用场景

一、缓存 作为Key-Value形态的内存数据库&#xff0c;Redis 最先会被想到的应用场景便是作为数据缓存。目前这几乎是所有中大型网站都在用的必杀技&#xff0c;合理的利用缓存不仅能够提升网站访问速度&#xff0c;还能大大降低数据库的压力&#xff0c;而使用 Redis 缓存数据也…

SpringSecurity认证流程详解和代码实现

一、常见的登录校验流程 常见的登录&#xff0c;主要就是要做认证和授权。 从上面可以看到&#xff0c;登录校验的过程&#xff08;认证&#xff09;&#xff0c;主要就是围绕一个包含了用户信息的token来进行的。 至于授权的流程&#xff0c;也是由SpringSecurity来完成&…

访问PHP网页提示:将您重定向的次数过多,提示 301

访问PHP网页提示&#xff1a;将您重定向的次数过多,提示 301 chrome 浏览器 访问PHP网页提示&#xff1a;将您重定向的次数过多,提示 301 chrome 浏览器 去 chrome 浏览器设置&#xff0c;如下图 chrome://net-internals/#hsts

高性能计算培训价格 零基础入门 从入门到精通

大模型一出&#xff0c;各类企业的各类“模型”竞赛般的亮家伙&#xff0c;算力时代抢先到来。2023年4月超算互联网的正式部署&#xff0c;标志着&#xff0c;很快&#xff0c;越来越多的应用都需要巨大的计算资源。 这给传统的计算机体系结构带来了巨大的挑战&#xff0c;计算…

Layui多选框提交时只能获取到最后一个选中的值的解决办法

<div class"layui-card"><div class"layui-card-header layui-this">包装类型</div><div class"layui-card-body"><input type"checkbox" name"aa" title"1A-100" value"1A-100&…

【Linux】文件基础IO操作:C语言接口 | 系统调用接口 | 重定向

重修C语言文件知识Linux文件知识标记位传参文件的系统调用理解什么是文件文件fd的分配规则重定向C语言文件层面的缓冲区知识 重修C语言文件知识 打开文件操作fopen函数&#xff1a; 我们看一段代码&#xff0c;以写(w)的形式来打开文件&#xff1a; #include <stdio.h>…

Web服务器群集:部署Tomcat

目录 一、理论 1.Tomcat 2.JDK 3.Tomcat安装 4.Tomcat优化 5.Tomcat虚拟主机设置 二、实验 1.JDK安装 2.Tomcat安装 3.Tomcat优化 4.Tomcat 虚拟主机配置 三、总结 一、理论 1.Tomcat &#xff08;1&#xff09;概念 Tomcat服务器是一个免费的开放源代码的Web应用…

emscripten的安装

参考&#xff1a;1.1 安装Emscripten-C/C面向WebAssembly编程 下载emsdk&#xff08;emscripten&#xff09;&#xff0c;git地址&#xff1a;git clone GitHub - emscripten-core/emsdk: Emscripten SDK打开emsdk中emsdk.bat所在的目录&#xff0c;进入cmd&#xff0c;输入 e…

Node.js健康检查和过载保护

[图片来源&#xff1a;unsplash.com[1]] 设想一下&#xff0c;你有30个Node服务器与 "Nginx "服务器平衡。服务器的负载被平均分配&#xff0c;所以如果你有9000个用户&#xff0c;每个服务器有300个客户。把负载平均分配给每台服务器并不意味着你可以避免过载&#…

linux下MySQL忘记密码解决方法

背景&#xff1a;自己搭建了很多测试环境&#xff0c;有的时候&#xff0c;某一台机器上面的MySQL密码可能就忘了&#xff0c;这种情况怎么办&#xff1f;记录一下解决方法&#xff0c;便于以后迅速解决这一类问题 第一步&#xff1a;查看MySQL的进程是否存活 ps -ef|grep my…

CMU15-445 2022 Fall 通关记录 —— Project 2:B+ Tree(上篇)

Project 2&#xff1a;B Tree Project #2 - BTree | CMU 15-445/645 :: Intro to Database Systems (Fall 2022) NOTE&#xff1a; 记录完成该Pro中&#xff0c;一些可能会遇到的问题&#xff1a; 本实验中&#xff0c;有很多API是需要自己去实现的&#xff0c;因此&#xf…

NLP入门:word2vec self-attention transformer diffusion的技术演变

这一段时间大模型的相关进展如火如荼&#xff0c;吸引了很多人的目光&#xff1b;本文从nlp领域入门的角度来总结相关的技术路线演变路线。 1、introduction 自然语言处理&#xff08;Natural Language Processing&#xff09;&#xff0c;简称NLP。这个领域是通过统计学、数…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十七章 网络安全技术下)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、扫描工具赏析1、扫描工具概述2、如何获取扫描工具3、常用扫描工具4、SATAN的分级5、SATAN的特点6、SNMP7、Nessus8、X-scan9、常用扫描工具比较10、其它扫描工具 二、扫描…

【azure】office 365邮箱auth2认证之spa的刷新令牌过期后如何处理

参考&#xff1a;https://learn.microsoft.com/zh-cn/azure/active-directory/develop/refresh-tokens 官方对令牌和刷新令牌生命周期的描述 已失效的刷新令牌如何获取新的令牌和刷新令牌 /*** office 365使用失效的刷新令牌和应用程序的相关信息来获取新的访问令牌和刷新令牌…

PyTorch安装配置(windows)

一、Anaconda安装与配置 Anaconda提供了conda机制用于管理Python数据分析时常用的工具库/包 官网下载最新的&#xff08;翻墙&#xff09;&#xff1a;https://repo.anaconda.com/archive/ 清华大学Anaconda镜像站&#xff1a;https://mirrors4.tuna.tsinghua.edu.cn/help/an…

从研发赋能型PMO到产研管理型PMO的组织变革思考︱广联达产研管理部副总经理丰之恺

广联达科技股份有限公司产研管理部副总经理丰之恺先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;从研发赋能型PMO到产研管理型PMO的组织变革思考。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#x…

4G无线通信技术的单片机远程升级研究(学习)

介绍了一种基于4G无线通信技术的单片机远程在线升级系统及方法&#xff0c;由上位机、4G无线模块、嵌入式设备终端3部分组成。 结合EC20 R2.1 4G模块&#xff0c;介绍了4G无线网络的组建方法&#xff0c;借助4G网络实现远程无线升级。 通过验证测试&#xff0c;系统能够实现嵌入…