当前位置: 首页 > article >正文

鸿蒙HarmonyOS开发生日选择弹框

鸿蒙HarmonyOS开发生日选择弹框

生日选择弹框和城市选择弹框差不多,都是通过观察上一个数据变化来设置自己的数据

一、思路:

一个弹框上建三个compoent,一个年,一个月,一个日。日的数据是根据年和月进行变化的

二、效果图:

在这里插入图片描述

三、视频效果:

鸿蒙Next开发教程实战案例源码分享-生日选择弹框

四、关键源码如下:
// 联系:893151960
@Component
export struct FirstLevelComponent {
  @State labelList: string[] = [];
  @Consume selectFirstIndex: number;
  @Consume currentFirst: string;
  @Consume dataSource: string[];

  aboutToAppear() {
    for (let i = 0; i < this.dataSource.length; i++) {
      this.labelList.push(this.dataSource[i])
      if (this.dataSource[i] === this.currentFirst) {
        this.selectFirstIndex = i;
      }
    }
    this.currentFirst = this.dataSource[this.selectFirstIndex]
  }

  build() {
    Column() {
      Column() {
        if (this.labelList.length === 0) {
          Text('暂无数据').fontSize(20)
        } else {
          TextPicker({ range: this.labelList, selected: this.selectFirstIndex })
            .onChange((value: string|string[], index: number|number[]) => {
              if (typeof index === 'number') {
                this.selectFirstIndex = index
                this.currentFirst = this.dataSource[index]
              }

            })
            .selectedTextStyle({
              color:$r('app.color.color_main')
            })
            .canLoop(false)
        }
      }
      .backgroundColor(Color.White)
      .border({ color: '#e2e2e2', width: { right: 0.5 }
      })
      .width('100%')
      .layoutWeight(1)
      .justifyContent(FlexAlign.Center)
    }
    .height('100%')
  }
}
/**
 * @author :congge
 * @date : 2024-01-24 11:45
 * @desc : 生日选择专用弹框
 **/
@CustomDialog
export default struct BirthdayPickerDialog {
  @Provide currentFirst: string = '';
  @Provide currentSecond: string = '';
  @Provide currentThree: string = '';
  @Provide selectFirstIndex: number = 0;
  //注意; 这位置很可能和数组的位置对不上的,因为它的起点是以为左边选中开始的
  @Provide selectSecondIndex: number = 0;
  controller: CustomDialogController
  title: string = '选择生日' //弹窗的提示文本
  @Provide dataSource: string[] = CommonConstants.YEAR
  @Provide secondOnlyDataSource: string[] = CommonConstants.MONTH

  resultCallback?:(arg0:string,arg1:string,arg2:string) => void

  aboutToAppear() {
    this.currentFirst = this.dataSource[0];
    this.currentSecond = this.secondOnlyDataSource[0];
  }

  build() {
    Column() {
      Text(this.title)
        .fontSize(20)
        .textAlign(TextAlign.Center)
        .margin({ top: 10, bottom: 10 });
      Row() {
        FirstLevelComponent().width('33%');
        // 手动给线
        Divider()
          .vertical(true)
          .color($r('app.color.color_e2'))
          .width(0.5)
        SecondOnlyLevelComponent().width('33%');
        Divider()
          .vertical(true)
          .color($r('app.color.color_e2'))
          .width(0.5)
        DayLevelComponent().width('33%');
      }.height('40%')

      Flex({ justifyContent: FlexAlign.SpaceAround, alignItems: ItemAlign.Center }) {
        Button($r('app.string.cancel'), { type: ButtonType.Normal })
          .onClick(() => {
            this.controller?.close()
          })
          .backgroundColor(0xffffff)
          .fontColor(Color.Black)
          .layoutWeight(1)
          .height('100%')
        Divider()
          .vertical(true)
          .strokeWidth(1)
          .color('#F1F3F5')
          .opacity(1)
          .height('100%')
        Button($r('app.string.sure'), { type: ButtonType.Normal })
          .onClick(() => {
            this.controller?.close()
            this.resultCallback?.(this.currentFirst,this.currentSecond,this.currentThree)
          })
          .backgroundColor(0xffffff)
          .fontColor($r('app.color.color_main'))
          .layoutWeight(1)
          .height('100%')
      }.height(50)
    }
  }
}
五、完整项目demo结构图:

在这里插入图片描述有需要完整源码demo可私信我


http://www.kler.cn/a/381214.html

相关文章:

  • GitLab的安装与卸载
  • oracle: create new database
  • 大数据操作实验一
  • docker--压缩镜像和加载镜像
  • 【day11】面向对象编程进阶(继承)
  • [计算机网络]唐僧的”通关文牒“NAT地址转换
  • 微信小程序uniapp+vue飞机订票航空售票系统
  • MVC 文件夹结构详解
  • 提升安全上网体验:Windows 11 启用 DOH(阿里公共DNS)
  • 商务礼仪与职场沟通
  • 定义全局键盘监听事件,el-dialog中删除不可用
  • docker离线使用镜像包还原镜像
  • Python设计模式探究:单例模式实现及应用解析
  • C#中的同步和异步回调
  • QML项目实战:自定义Switch按钮
  • 【毫米波雷达(三)】汽车控制器启动流程——BootLoader
  • NewStar easygui re wp
  • 常见用于从 HTTP 请求中提取数据的注解
  • 使用VBA宏合并多个Excel文件的Sheet页
  • 【unique_str 源码学习】
  • 【Clikhouse 探秘】ClickHouse 物化视图:加速大数据分析的新利器
  • 小菜家教平台:基于SpringBoot+Vue打造一站式学习管理系统
  • 单链表的实现(数据结构)
  • 成为编程高手 day16
  • Python小白学习教程从入门到入坑------第二十五课 多态(语法进阶)
  • Vue.js 提供了一个事件系统,允许组件之间通过自定义事件进行通信