鸿蒙开发进阶:实现一个属于自己的日期选择器

鸿蒙Harmony应用开发—ArkTS-全局UI方法(时间滑动选择弹窗) 时间滑动选择弹窗 阅读详情

前言

hello 大家好 我是无言。最近在开发一个鸿蒙项目,刚好遇到了一个自定义比较强,样式还挺不错的日期选择器需求,经过不断调试打磨,最终效果还不错,所以打算分享出来,给大家一些创意灵感。

主要实现的功能

  • 选中日期回传给父组件。
  • 根据父组件默认选中时间打开子组件弹窗回显日期。
  • 动态加载日期边滚动边加载后续数据提升性能。

实现效果先一睹为快。

实现过程

一、准备工作
  • 安装好最新DevEco Studio 开发工具,创建一个新的空项目。
  • 为了避免重复造轮子,所以时间处理工具我这里用了[dayjs]。

 

二、先把整个弹窗逻辑实现

  • 创建弹窗子组件文件 ets/components/TimeDateDialog.ets 下面代码建议着重看下添加注释的地方,是容易踩坑的地方,所以我都特别标注出来了。
//弹窗具体内容
@CustomDialog
struct CustomDialogDate {
  controller?: CustomDialogController
  @State dateList:string[]=['2024-01-11','2024-01-12','2024-01-13','2024-01-14','2024-01-15'] //只存储天
  @State hourList:string[]=['01','02','03','04','05'] //只存储小时
  @State minList:string[]=['05','10','15','20','25'] //只存分钟
  cancel: () => void = () => {
  }
  confirm: (data:string) => void = () => {
  }

  aboutToAppear(): void {

  }

  build() {
    Column() {
      Row(){
        Text('显示时间').fontSize(18)
      }.padding({ bottom:25 }).width('100%').justifyContent(FlexAlign.Center)
      // 滚动选中区域
      Flex(){
        // 时间
        Flex(){
          // 时间
          TextPicker({ range: this.dateList})
            .width('50%')
            .canLoop(false)//不循环
            .divider({
              strokeWidth: 1,
              startMargin: 0,
              endMargin: 0,
              color:'#ececec'
            })
            .textStyle({color:'#777777', font: {size: 15, weight: 400}})
            .selectedTextStyle({color: '#ffd96868', font: {size: 15, weight: 600}})
         TextPicker({ range: this.hourList }).width('25%')
            .divider({
              strokeWidth: 1,
              startMargin: 0,
              endMargin: 0,
              color:'#ececec'
            })
            .textStyle({color:'#777777', font: {size: 15, weight: 400}})
            .selectedTextStyle({color: '#ffd96868', font: {size: 15, weight: 600}})

          //分钟
          TextPicker({ range: this.minList}).width('25%')
            .divider({
              strokeWidth: 1,
              startMargin: 0,
              endMargin: 0,
              color:'#ececec'
            })
            .textStyle({color:'#777777', font: {size:15, weight: 400}})
            .selectedTextStyle({color: '#ffd96868', font: {size: 15, weight: 600}})

        }
      }
      // 按钮
      Row(){
        Button('取消', { type: ButtonType.Normal, stateEffect: true })
          .margin({right:6})
          .borderRadius(6)
          .backgroundColor('#fff')
          .fontColor('#ffd96868')
          .borderWidth(1)
          .borderColor('#ffd96868')
          .fontSize(15)
          .width(156)
          .onClick(()=>{
            this.controller?.close()
          })
        Button('确定', { type: ButtonType.Normal, stateEffect: true })
          .margin({left:6})
          .borderRadius(6)
          .fontSize(15)
          .backgroundColor('#ffd96868')
          .width(156)
          .onClick(()=>{
             this.confirm('回传信息给父组件')
            this.controller?.close()
          })
      }.justifyContent(FlexAlign.Center)
      .padding({top:15})
      .margin({top:25})
    }.width('100%')
    .padding(16)
    .backgroundColor('#fff')
    .borderRadius({topLeft:15,topRight:15})
  }
}

//定义controller对象 主要作用父子通信 父组件调用子组件方法 唤醒弹窗
export  class DialogDateController {
  ShowDialog = (value?: string) => {
  }
}

//弹窗控制逻辑
@Component
export  struct TimeDateDialog { //修改命名 注意前面加了 export 需要暴露组件
  private controller: DialogDateController = new DialogDateController();
  CustomDialogController: CustomDialogController | null =null ;
  @Prop defaultTime: string;
  cancel?: () => void
  confirm?: (data:string) => void = () => {
  }
  // 打开显示弹窗
  private async 
鸿蒙UI开发——时间选择对话框(TimePickerDialog) 在我们项目开发过程中,时常会遇到时间选择的场景(如下图),ArkUI为我们提供了一套时间选择对话框,本文针对时间选择对话框的使用做简单介绍。 阅读详情

相关推荐

HarmonyOS 自定义日期选择器组件详解

通过该方案,我们实现一个样式自定义、数据联动、动画交互良好的日期选择器。相较于原生 `DatePicker`,更具灵活性和扩展性,适用于日程安排、时间过滤等场景。

小北的博客 1449

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择

18.鸿蒙HarmonyOS App(JAVA)日期选择器-时间选择点击button按钮显示月份与获取的时间。

Txwtech 1746

期末项目实战:基于鸿蒙ArkTs语言的健康检测App主页面开发

练习,在swiper组件中输入Hello和World,在对应区域出现滑块,运用此方法我们对其内部进行改造,因为效果图中背景颜色是白色,我们需要把上述的Text中的backgroundColor中的颜色删除,在对内容进行输入,我们会发现,输入完数据之后,文字都被挤到了一起,这个时候我们可以通过FlexAlign布局对列布局进行改变。现在仍存在一个问题,使用自定义样式之后,系统只会判断是否点击,点击后的图片的交互(高亮)并没有完成,系统不知道你目前切换到了哪一个Bar,从而无法完成切换。

2301_78053665的博客 2924

OpenHarmony实战开发-如何实现自定义日历选择

本示例介绍通过CustomDialogController类显示自定义日历选择

2401_82546228的博客 781

鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:DatePicker)

ArkTS声明式开发(基础手势:DatePicker)

m0_64420071的博客 1885

鸿蒙系统开发

ArkTS 在保持 TypeScript(简称 TS)基本语法风格的基础上,进一步通过规范强化静态检查和分析,使得在程序运行之前的开发期能检测更多错误,并提升运行时性能。针对 JavaScript(简称JS)/TS 并发能力支持有限的问题,ArkTS 对并发编程 API 和能力进行了增强。(3)不支持structural typing。7、类和对象、集成和重写、多态和静态成员。(1)线性布局(Row/Column)(1)不支持在运行时更改对象布局。(2)层叠布局(stack)(3)弹性布局(Flex)

qq_55750963的博客 1157

HarmonyOS鸿蒙开发日期选择器(阳历、阴历)

HarmonyOS鸿蒙开发日期选择器(阳历、阴历)

qq_36255346的博客 879

Flutter日期选择器跨平台(鸿蒙

防御性参数设置:对每个跨平台API的参数都做严格约束,不依赖默认行为渐进式功能降级:在鸿蒙设备上主动放弃部分非核心功能,确保核心体验稳定数据驱动决策:建立设备性能数据库,根据真实设备表现动态调整配置跨平台开发从不是简单的"write once, run anywhere",而是"design once, adapt everywhere"。当我们学会尊重每个平台的独特性,才能真正释放跨平台技术的价值。在鸿蒙生态蓬勃发展的今天,掌握这些适配技巧,将让你在技术浪潮中立于不败之地。欢迎大家加入。

2401_85571293的博客 853

鸿蒙(HarmonyOS)学习路线总结

以上的内容都简单过了一遍,去开发者学堂把相关基础视频看一遍,就能做项目了,边做边学如果您想第一时间看我的后期文章,扫码关注公众号安辉编程笔记 - 开发技术分享扫描二维码加关注。

安辉 3862

鸿蒙HarmonyOS NEXT开发:CalendarPicker(基础组件)

日历选择组件,提供下拉日历弹窗,可以让用户选择日期。

shudaoshanBBQ的博客 1668

鸿蒙(HarmonyOS)应用开发——健康生活应用(5)

build() {// 1.日期选择器})})// 2.按钮Button('取消')Button('确定')// 1.保存日期到全局存储// 2.关闭窗口})

m0_74172285的博客 1030

鸿蒙自定义时间选择开发

鸿蒙自定义时间选择实现指南 本文详细介绍了在鸿蒙系统中开发自定义时间选择组件的完整流程。通过流程图展示了从初始化数据到UI构建的完整逻辑链,包含以下关键点: 组件采用双时间选择模式(开始/结束时间),通过Swiper滑动视图切换 时间选择分为三个Tab页(今天/明天/后天),使用垂直布局的Tabs组件 核心功能包括: 时间验证逻辑(结束时间必须晚于开始时间) 动态时间更新机制 响应式UI状态管理

2501_91063928的博客 2196

鸿蒙OpenHarmony【日期滑动选择弹窗 (DatePickerDialog)】弹窗

定义日期滑动选择弹窗并弹出。

hhhhhh2323的博客 927

鸿蒙HarmonyOS)项目方舟框架(ArkUI)之DatePicker组件

鸿蒙HarmonyOS)项目方舟框架(ArkUI)之DatePicker组件

adendean的博客 915

HarmonyOS NEXT应用开发—自定义日历选择

本示例介绍通过CustomDialogController类显示自定义日历选择

1 1389

鸿蒙API14开发【时间滑动选择弹窗 (TimePickerDialog)】ArkTS组件

本文介绍了TimePickerDialog组件的基本用法和配置选项。该组件用于创建24小时制的时间滑动选择弹窗,支持自定义时间格式、文本样式等参数。主要特性包括:可通过show()方法弹出选择,支持12/24小时制切换(useMilitaryTime参数),并能设置选项文本样式(disappearTextStyle)。组件从API8开始支持,原子化服务从API11开始可用。使用时需注意UI上下文的限制,API10及以上版本可通过UIContext明确执行环境。

bbq的博客 1241

鸿蒙5.0版开发:ArkTS组件-时间滑动选择弹窗 (TimePickerDialog)

以24小时的时间区间创建时间滑动选择,展示在弹窗上。

m0_69424697的博客 888

HarmonyOs鸿蒙开发,日期滑动选择

本文介绍了HarmonyOS ArkTS中的DatePickerDialog日期选择对话框组件。该组件支持日期范围设置(start/end参数)、农历显示(lunar参数)、时间选择(showTime参数)、触觉反馈等功能。文章详细解析了组件的核心参数配置和多个回调函数(onDateAccept、onCancel等)的使用方法,并提供了完整示例代码和效果演示。同时指出了常见问题如月份索引从0开始、触觉反馈依赖硬件支持等注意事项,最后总结了该组件在创建良好用户体验方面的优势。

商城app+新闻app+备忘录记事本app视频教程在某站【浩宇软件开发】 1080
上一篇: 鸿蒙ArkUI开发进阶 - 实现简易的方法hook框架
下一篇: 鸿蒙开发进阶:一次开发,多端部署的两把利剑(GridRow、GridCol)
初一十五啊
博客等级 码龄6年 4614粉丝 350原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值