鸿蒙ArkUI实现开关switch组件

简介: 鸿蒙ArkUI实现开关switch组件

鸿蒙ArkUI官方提供的toggle组件实现了开关的样式,但在使用过程中还是非常的不方便。

DIY可视化对鸿蒙ArkUI实现开关switch组件扩展后满足基本的switch需求,支持绑定值、设置标题文本、整个背景样式等。

/**
 * 开关
 */
@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%')
    }
 
    @Builder
    NavigationTitle() {
        Column() {
            Text('个人中心')
                .width('100%')
                .textAlign(TextAlign.Center)
                .height('28vp')
                .fontSize('20fp')
                .fontWeight(500)
                .fontColor('#fff')
        }
    }
 
 
}
目录
相关文章
|
6天前
|
Android开发 UED iOS开发
Harmony os next~UI开发与ArkUI框架
鸿蒙OS的UI开发基于ArkUI框架,采用声明式编程,简化开发流程。五大核心组件(Text、Button、List、Grid、Flex)助力高效布局,支持数据绑定与动态更新。事件响应机制灵敏,适合构建交互丰富的应用。实战技巧包括规范命名、样式复用和调试方法。掌握这些,轻松开发鸿蒙应用。下期预告:分布式开发,记得带上烤冷面!
20 0
|
6天前
|
人工智能 Java 程序员
一文轻松拿下HarmonyOS NEXT的自定义组件
本文介绍ArkUI中的自定义组件开发,涵盖基础概念、语法格式、创建与使用方法、成员函数/变量定义及通用样式事件设置等内容。通过实例代码演示,帮助开发者掌握自定义组件的构建与复用技巧,助力高效开发。君志所向,一往无前!希望在成长的路上有你相伴。
37 7
|
12天前
|
前端开发 JavaScript 开发工具
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
65 5
【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
|
13天前
|
开发框架 前端开发 JavaScript
一文彻底搞清楚HarmonyOS中的ArkUI
本文介绍了华为推出的跨平台UI框架ArkUI,旨在简化多平台应用开发。ArkUI支持声明式和类Web两种开发范式,其中声明式开发范式因其高效简洁、性能优越和未来发展潜力而被推荐。ArkUI提供了丰富的组件、布局、动画和交互事件等功能,帮助开发者构建美观流畅的应用界面。其架构体系包括声明式UI前端、语言运行时、后端引擎、渲染引擎和平台适配层,确保高效开发和跨平台兼容性。
34 0
一文彻底搞清楚HarmonyOS中的ArkUI
|
13天前
|
人工智能 Java 程序员
HarmonyOS NEXT开发-ArkUI六
本文介绍了颜色渐变(线性渐变和径向渐变)与阴影效果的应用,通过具体代码示例展示了如何在组件中实现这些视觉效果,帮助开发者提升界面美观度。君志所向,一往无前,欢迎一起探索! 简介字数:239
16 0
HarmonyOS NEXT开发-ArkUI六
|
13天前
|
人工智能 Java 程序员
HarmonyOS NEXT开发-ArkUI八
本文介绍了Harmony OS开发中的线性布局技巧,包括交叉轴对齐、自适应缩放及综合实践案例,帮助开发者轻松掌握相关技能。每天学习一个知识点,一起加油!
18 0
HarmonyOS NEXT开发-ArkUI八
|
13天前
|
人工智能 Java 程序员
HarmonyOS NEXT开发-ArkUI十二
网格布局(Grid)适用于由多行列组成的复杂界面,支持固定行列、合并单元格及滚动效果。其应用场景广泛,如文件管理、购物列表等。通过设置`columnsTemplate`和`rowsTemplate`可定义行列比例,使用`GridItem`组件实现内容展示。此外,还能通过自定义滚动条优化用户体验。代码示例展示了如何创建固定行列、合并单元格以及实现滚动效果的网格布局。 关注程序员Feri,了解更多实用技术与搞钱技巧,一起在编程道路上不断前行!
22 0
HarmonyOS NEXT开发-ArkUI十二
|
13天前
|
人工智能 Java 程序员
HarmonyOS NEXT开发-ArkUI十一
本文介绍Swiper组件,它用于滑动轮播显示,支持自动播放、纵向滑动、自定义导航点等特性。通过设置尺寸、内容及属性,可实现丰富的轮播效果。示例代码展示了基本用法和综合实践,帮助开发者快速上手。
27 0
HarmonyOS NEXT开发-ArkUI十一
|
13天前
|
人工智能 前端开发 Java
HarmonyOS NEXT开发-ArkUI十
本文介绍了布局实践、定位(绝对与相对)、通用属性(多态样式和动画)及图形变换(平移、缩放、旋转),帮助开发者掌握前端布局技巧和交互效果优化。君志所向,一往无前!
29 0
HarmonyOS NEXT开发-ArkUI十
|
13天前
|
人工智能 Java 程序员
HarmonyOS NEXT开发-ArkUI九
本文介绍了弹性布局(Flex)、商品列表展示及层叠布局(StackLayout)的基本概念与实际应用,通过代码示例详细讲解了这些布局方式的使用方法和效果。希望在搞钱的路上有你相伴!君志所向,一往无前!
10 0
HarmonyOS NEXT开发-ArkUI九

热门文章

最新文章

  • 1
    原生鸿蒙版小艺APP接入DeepSeek-R1,为HarmonyOS应用开发注入新活力
  • 2
    【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
  • 3
    EMAS 性能分析全面适配HarmonyOS NEXT,开启原生应用性能优化新纪元
  • 4
    鸿蒙开发:了解@Builder装饰器
  • 5
    【04】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-正确安装鸿蒙SDK-结构目录介绍-路由介绍-帧动画(ohos.animator)书写介绍-能够正常使用依赖库等-ArkUI基础组件介绍-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
  • 6
    【01】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-优雅草卓伊凡拟开发一个一站式家政服务平台-前期筹备-暂定取名斑马家政软件系统-本项目前端开源-服务端采用优雅草蜻蜓Z系统-搭配ruoyi框架admin后台-全过程实战项目分享-从零开发到上线
  • 7
    Harmony os next~HarmonyOS Ability与页面跳转开发详解
  • 8
    HarmonyOS使用系统图标
  • 9
    【02】鸿蒙实战应用开发-华为鸿蒙纯血操作系统Harmony OS NEXT-项目开发实战-准备工具安装-编译器DevEco Studio安装-arkts编程语言认识-编译器devco-鸿蒙SDK安装-模拟器环境调试-hyper虚拟化开启-全过程实战项目分享-从零开发到上线-优雅草卓伊凡
  • 10
    鸿蒙H5离线包技术分享