鸿蒙ArkUI实现开关switch组件

鸿蒙ArkUI官方提供的toggle组件实现了开关的样式,但在使用过程中还是非常的不方便。
DIY可视化对鸿蒙ArkUI实现开关switch组件扩展后满足基本的switch需求,支持绑定值、设置标题文本、整个背景样式等。

cke_1217.png

cke_1641.png

/*** 开关*/
@Component
export default  struct DiygwSwitch{//绑定的值@Link value:number;//未选中图标@State labelImg: Resource = $r('app.media.user');//是否文本图片@State isLabelImg: boolean = false;@State labelImgWidth: number = 20;@State labelImgHeight: number = 20;//标题文本@State label:string = '开关';//水平状态时,文本占大小@State labelWidth:number = 80;//是否标题文本换行@State isWrapLabel:boolean = false;//是否标题文本@State isLabel:boolean = true;//标题颜色@State labelColor:string = "#333333";//自动标题长度@State isLabelAuto:boolean = false;//文本字体大小@State textSize:number = 14;//选中图版本大小@State imgSize:number = 28;//组件内边距@State leftRightPadding:number = 16;@State topBottomPadding:number = 6;@State justifyContent:FlexAlign = FlexAlign.End@State pointColor:string = "#fff";@State selectedColor:string = "#07c160";@State isShowValue:boolean = true;@State isBorder:boolean = true;build() {Flex({alignItems:this.isWrapLabel?ItemAlign.Start:ItemAlign.Center,direction:this.isWrapLabel?FlexDirection.Column:FlexDirection.Row,justifyContent:FlexAlign.Start}){if(this.isLabel){Row(){if(this.isLabelImg){Image(this.labelImg).width(this.labelImgWidth).height(this.labelImgHeight).margin({ left:3 }).flexShrink(0)}if(this.isLabelAuto){Text(this.label).flexShrink(0).fontColor(this.labelColor).fontSize(this.textSize).margin({bottom:this.isWrapLabel?10:0,right:10,}).textAlign(TextAlign.Start);}else{Text(this.label).fontColor(this.labelColor).width(this.isWrapLabel?'100%':this.labelWidth).fontSize(this.textSize).margin({bottom:this.isWrapLabel?10:0}).textAlign(TextAlign.Start);}}.margin({top:this.isWrapLabel?10:0})}Flex({alignItems:this.isWrapLabel?ItemAlign.Start:ItemAlign.Center,justifyContent:this.justifyContent}){Toggle({ type: ToggleType.Switch, isOn: this.value==1 }).selectedColor(this.selectedColor).switchPointColor(this.pointColor).height(40).onChange((isOn: boolean) => {this.value = this.value==1?0:1})}}.borderWidth({bottom: this.isBorder?1:0}).borderColor({bottom: "#eee"}).borderStyle(BorderStyle.Solid).borderStyle(BorderStyle.Solid).height(this.textSize+(this.isWrapLabel?20:0)+30+this.topBottomPadding*2).padding({left:this.leftRightPadding,right:this.leftRightPadding,top:this.topBottomPadding,bottom:this.topBottomPadding})}
}
import {navigateTo
} from '../common/Page'
import {IDynamicObject
} from '../component/IType';
import DiygwSwitch from '../component/Switch'
@Entry
@Component
export struct User17069303301033d7f5a1283 {@State switched: number = 1;@State switch1: number = 1;async onPageShow() {}async aboutToAppear() {await this.onPageShow()}build() {Column() {Navigation().width('100%').height('56vp').backgroundColor('#07c160').title(this.NavigationTitle()).titleMode(NavigationTitleMode.Mini).align(Alignment.Center).hideBackButton(true)Scroll() {Flex({direction: FlexDirection.Column}) {DiygwSwitch({label: '开关',value: $switched}).width('100%')DiygwSwitch({label: '开关',value: $switch1}).width('97.33%').margin({left: '5vp',right: '5vp',top: '5vp',bottom: '5vp'}).borderRadius({topLeft: '6vp',topRight: '6vp',bottomLeft: '6vp',bottomRight: '6vp'}).backgroundColor("#d6d6d6")}.height('100%')}.height('100%').layoutWeight(1)}.alignItems(HorizontalAlign.Start).height('100%')}@BuilderNavigationTitle() {Column() {Text('个人中心').width('100%').textAlign(TextAlign.Center).height('28vp').fontSize('20fp').fontWeight(500).fontColor('#fff')}}}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

conda虚拟环境基础

【一文搞定最新版Anaconda】Win11 安装 Anaconda(2023.9)详解(不删除旧版情况下下载、安装、注册、登录、设置环境变量、迁移旧环境、配置修改换源等)连接Pycharm_win11安装anaconda-CSDN博客 conda命令大全(create/in…

Linux内存管理:(十一)页面分配之慢速路径

文章说明: Linux内核版本:5.0 架构:ARM64 参考资料及图片来源:《奔跑吧Linux内核》 Linux 5.0内核源码注释仓库地址: zhangzihengya/LinuxSourceCode_v5.0_study (github.com) 1. 水位管理和分配优先级 页面分配…

小程序支付类型接入京东支付

一、情景描述 当前项目想在微信小程序付款时添加上京东支付支付类型,效果如下 普通的付款方式可以直接付款就能完成支付,但京东支付无法在小程序上直接付款,他需要复制生成的链接,然后打开京东app然后在京东平台上付款。 所以&…

网络异常案例六_IP冲突

问题现象 同一个局域网下,一个路由器带几十台终端设备,存在终端设备获取到了相同IP的场景。该路由器也是DHCP Server。 有两个设备终端,都显示获取到了192.168.11.177这个ip。 抓包分析 抓包过程中,看到的一些问题。 ps&#x…

使用ngrok内网穿透

没有服务器和公网IP,想要其他人访问自己做好的网站,使用这款简单免费的内网穿透小工具——ngrok,有了它轻松让别人访问你的项目~ 一、下载ngrok 官网地址:ngrok | Unified Application Delivery Platform for Developers&#x…

[N-137]基于springboot,vue运动会报名管理系统

开发工具:IDEA 服务器:Tomcat9.0, jdk1.8 项目构建:maven 数据库:mysql5.7 项目采用前后端分离 前端技术:vueAvueElementUI 服务端技术:springbootmybatis 本项目分为用户和管理员两种角…

07 SB3之@HttpExchange(TBD)

HttpExchange是SpringBoot3的新特性. Spring Boot3 提供了新的 HTTP 的访问能力,封装了Http底层细节. 通过接口简化 HTTP远程访问,类似 Feign 功能。 SpringBoot 中定义接口提供 HTTP 服务 --> 框架生成的代理对象实现此接口 --> 框架生成的代理…

Docker 阿里云镜像仓库CR使用实践

一、使用容器镜像,查看镜像,创建,推送,拉取阿里云镜像 CR镜像管理(阿里云容器镜像服务(Container Registry)) 登录实例 未创建的镜像名称也可以push、docker的私有仓库需要提起创建…

LangGPT-人人都可以写高质量的prompt

使用 LangGPT,可以在几分钟内轻松上手大模型指令编写。 网址:https://github.com/EmbraceAGI/LangGPT/tree/main 手册:⭐LangGPT 结构化提示词 模版 # Role: 角色名## Profile - Author: 西堂 - Version: 0.1 - Language: 中文 - Descripti…

C++ cin 的过程

从一段代码开始: int main() {int a, b;cin >> a >> b; }首先阻塞在 cin >> a >> b 中,等待用户输入,用户可以一直输入,直到输入了回车,这时一个以 \n 结尾的字符串就会输入到cin 的 charact…

2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测

2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测 目录 2024美赛预测算法 | 回归预测 | Matlab基于RIME-LSSVM霜冰算法优化最小二乘支持向量机的数据多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效…

【AI绘画UI+Windows部署】Fooocus:Controlnet原作者结合了sd的开源和Midjourney重新设计的UI

代码:https://github.com/lllyasviel/Fooocus windows一键启动包下载:https://github.com/lllyasviel/Fooocus/releases/download/release/Fooocus_win64_2-1-831.7z B站视频教程:AI绘画入门神器:Fooocus | 简化SD流程&#xff0c…