鸿蒙:PickerDialog 日期选择弹窗实现流程

1、前言

本文将以「日期选择弹窗」为例,参考官方文档学习与实践,并动手打造一个练手页面。

2、功能目标

  1. 页面显示标题、当前选中日期文本​
  2. 点击按钮弹出日期选择弹窗​
  3. 选择日期后,页面文本实时更新,控制台打印选中日期​
  4. 自定义弹窗确认 / 取消按钮的样式(颜色、圆角、背景等)

核心代码

复制代码
 // 8. 显示日期选择器弹窗
            CalendarPickerDialog.show({
              selected: this.selectedDate, // 9. 弹窗初始选中的日期,使用已保存的选中日期
              // 10. 确认按钮样式配置
              acceptButtonStyle: {
                fontColor: '#2787d9', // 文字颜色
                fontSize: '16fp', // 文字大小
                backgroundColor: '#f7f7f7', // 背景色
                borderRadius: 10 // 圆角半径
              },
              // 11. 取消按钮样式配置
              cancelButtonStyle: {
                fontColor: Color.Red, // 文字颜色(使用系统提供的红色)
                fontSize: '16fp', // 文字大小
                backgroundColor: '#f7f7f7', // 背景色
                borderRadius: 10, // 圆角半径,

              },
              // 12. 确认选择回调:用户点击确认按钮时触发
              onAccept: (date: Date) => {
                // 更新选中日期为用户新选择的日期,确保下次弹窗显示最新选中值
                this.selectedDate = date;
                // 打印选中的日期到控制台
                console.log('选择的日期是', this.formatDate(this.selectedDate))
              }
            })

3、参考文档

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-fixes-style-dialog#%E9%80%89%E6%8B%A9%E5%99%A8%E5%BC%B9%E7%AA%97-pickerdialoghttps://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-fixes-style-dialog#%E9%80%89%E6%8B%A9%E5%99%A8%E5%BC%B9%E7%AA%97-pickerdialog

4、运行效果图

5、Index.ets完整代码

复制代码
// 选择器弹窗 (PickerDialog)练习代码
// 官方文档链接:
// https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-fixes-style-dialog#%E9%80%89%E6%8B%A9%E5%99%A8%E5%BC%B9%E7%AA%97-pickerdialog

// 1. 组件装饰器:@Entry表示该组件为应用入口组件,@Component表示这是一个ArkUI组件
@Entry
@ComponentV2
struct Index {
  // 2. 成员变量:用于存储用户选中的日期,初始值设为2025-09-27
  @Local selectedDate: Date = new Date('2025-09-27');

  // 格式化日期为 'yyyy-MM-dd' 格式的函数
  formatDate(date: Date): string {
    const year = date.getFullYear(); // 获取年份(4位数字)
    const month = date.getMonth() + 1; // 获取月份(0-11),加1转为实际月份(1-12)
    const day = date.getDate(); // 获取日期(1-31)

    // 月份和日期不足两位时补0,再拼接成字符串
    return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}`;
  }

  // 3. 构建UI界面的方法,所有UI元素都在该方法中定义
  build() {
    // 4.  Column容器:垂直方向排列子组件,宽度占满屏幕
    Column() {
      Row()
        .height(30)
      Text("选择器弹窗 (PickerDialog)\n练习示例")
        .textAlign(TextAlign.Center)
        .fontWeight(FontWeight.Bold)
        .fontSize(24)
        .padding({ bottom: 200 })

      Column() {

        Text("选择的日期是:" + this.formatDate(this.selectedDate))
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
        // 5. 按钮组件:用于触发日期选择器弹窗的显示
        Button("开启日期选择器弹窗")
          .margin(20) // 6. 按钮外边距:上下左右各20vp
          .onClick(() => { // 7. 点击事件:按钮被点击时执行的逻辑
            // 8. 显示日期选择器弹窗
            CalendarPickerDialog.show({
              selected: this.selectedDate, // 9. 弹窗初始选中的日期,使用已保存的选中日期
              // 10. 确认按钮样式配置
              acceptButtonStyle: {
                fontColor: '#2787d9', // 文字颜色
                fontSize: '16fp', // 文字大小
                backgroundColor: '#f7f7f7', // 背景色
                borderRadius: 10 // 圆角半径
              },
              // 11. 取消按钮样式配置
              cancelButtonStyle: {
                fontColor: Color.Red, // 文字颜色(使用系统提供的红色)
                fontSize: '16fp', // 文字大小
                backgroundColor: '#f7f7f7', // 背景色
                borderRadius: 10, // 圆角半径,

              },
              // 12. 确认选择回调:用户点击确认按钮时触发
              onAccept: (date: Date) => {
                // 更新选中日期为用户新选择的日期,确保下次弹窗显示最新选中值
                this.selectedDate = date;
                // 打印选中的日期到控制台
                console.log('选择的日期是', this.formatDate(this.selectedDate))
              }
            })
          })
      }

    }.width('100%') // 13. 设置Column容器宽度为100%(占满屏幕宽度)

    .height('100%')
  }
}
相关推荐
蒸鱼Yuzheng40 分钟前
HarmonyOS HAP 与调试工件治理:包结构、版本身份与自动化证据链
自动化·性能测试·数据治理·harmonyos·hap
轻口味1 小时前
HarmonyOS 7 新特性3:TiledGSNode——轻带看让 71MB 庭院按视口按需加载:真机实测与零请求降级
华为·harmonyos·鸿蒙·tiledgsnode
李游Leo2 小时前
《HarmonyOS 7 ArkGraphics 3D 空间设计开发实战》01:从空场景到第一个可运行的3D房间【鸿蒙心迹】
3d·华为·harmonyos
猛犸象限2 小时前
【共创稿事节】关卡进了源码,却对不上 JSON——回归不是再截一张图
harmonyos
用户29469405448162 小时前
鸿蒙真机调试三板斧:Playwright 为什么驱动不了 Electron-on-鸿蒙
harmonyos·deepseek
木子雨廷2 小时前
第 26 天|Worker 多线程:重任务不阻塞 UI
harmonyos
huainingning2 小时前
MSTP技术及华三华为锐捷MSTP配置对比
华为
AI备忘录3 小时前
(二十二)华为华三锐捷迈普思科 802.1X 端口认证配置命令(网络准入五厂商对照)
运维·服务器·开发语言·网络·安全·华为
数据堂官方账号3 小时前
数据堂联合华为共筑 AI 数据价值新引擎
人工智能·华为·数据采集·具身智能·数据标注
2501_919749033 小时前
华为鸿蒙免费主题壁纸工具—小羊免费壁纸
华为·harmonyos·鸿蒙