• 作者:老汪软件技巧
  • 发表时间:2024-08-20 00:04
  • 浏览量:

探索ArkTS中的日期和时间选择器组件

“本文正在参加华为鸿蒙有奖征文征文活动”

ArkTS,作为鸿蒙应用开发框架中的一部分,为开发者提供了丰富的UI组件,用于构建高质量的用户界面。在这篇文章中,我们将解析两个ArkTS组件:DatePicker(日期选择器)和TimePicker(时间选择器)(api 11开始支持),并展示如何在应用中实现它们的功能。

日期选择器(DatePicker)

DatePicker组件允许用户从预定义的日期范围内选择一个日期。这个组件非常适合需要用户输入日期的场景,如日程安排、生日提醒等。

功能特点:

日期范围:通过设置start和end属性,可以指定用户可以选择的日期范围。

默认日期:selected属性允许你设置默认选中的日期。

// 实例化
private selectedDate: Date = new Date('2021-08-08')
​
//日期选择器组件
DatePicker({
        //指定选择器起始日期
        start: new Date('1970-1-1'),
        //指定选择器结束日期
        end: new Date('2100-1-1'),
        //指定默认日期     可$$双向绑定
        selected: this.selectedDate
      })//

农历显示:通过lunar属性,可以选择是否显示农历日期。

  //状态变量
    @State isLunar: boolean = false
  //按钮
  Button('切换公历农历')
        .margin({ top: 30, bottom: 30 })
        //点击事件
        .onClick(() => {
        //取反
          this.isLunar = !this.isLunar
        })
        
        //代码
          //是否显示农历
        .lunar(this.isLunar)//通过改变布尔值,更换状态

样式定制:disappearTextStyle、textStyle和selectedTextStyle属性允许你自定义文本样式,包括颜色、字体大小和字体粗细。

 //选择器边缘文本样式
        .disappearTextStyle({ 
        color: Color.Gray, 
        font: { size: '16fp', 
               weight: FontWeight.Bold
               }
          })

```
   //选择器未选中且不在边缘的文本样式
        .textStyle({ 
        color: '#ff182431', 
        font: { size: '18fp', 
                weight: FontWeight.Normal 
               }
           })
```
![]()

```
 //选择器 选中文本样式
        .selectedTextStyle({
            color: '#ff0000FF', 
            font: { size: '26fp', 
                   weight: FontWeight.Regular 
                   } 
                 })
```

事件监听:onDateChange事件在日期选择改变时触发,允许你执行一些操作,如更新UI或发送数据。

  //选择日期时触发该事件
        .onDateChange((value: Date) => {
          this.selectedDate = value
          console.info('选择当前日期为: ' + value.toString())
        })

实现示例:

在DatePickerExample组件中,我们实现了一个可以切换公历和农历显示的日期选择器。用户点击“切换公历农历”按钮时,isLunar状态会反转,从而改变日期选择器的显示模式。同时,我们监听onDateChange事件来更新选中的日期,并在控制台打印选中的日期。

完整案例

// xxx.ets
@Entry
@Component
struct DatePickerExample {
  @State isLunar: boolean = false
  private selectedDate: Date = new Date('2021-08-08')
​
  build() {
    Column() {
      Button('切换公历农历')
        .margin({ top: 30, bottom: 30 })
        .onClick(() => {
          this.isLunar = !this.isLunar
        })
      //日期选择器组件
      DatePicker({
        //指定选择器起始日期
        start: new Date('1970-1-1'),
        //指定选择器结束日期
        end: new Date('2100-1-1'),
        //指定默认日期     可$$双向绑定
        selected: this.selectedDate
      })//
        //选择器边缘文本样式
        .disappearTextStyle({ color: Color.Gray, font: { size: '16fp', weight: FontWeight.Bold } })//
          //选择器未选中且不在边缘的文本样式
        .textStyle({ color: '#ff182431', font: { size: '18fp', weight: FontWeight.Normal } })//
          //选择器 选中文本样式
        .selectedTextStyle({ color: '#ff0000FF', font: { size: '26fp', weight: FontWeight.Regular } })//
          //是否显示农历
        .lunar(this.isLunar)//
          //选择日期时触发该事件
        .onDateChange((value: Date) => {
          this.selectedDate = value
          console.info('选择当前日期为: ' + value.toString())
        })
    }.width('100%')
  }
}
​

时间选择器(TimePicker)

TimePicker组件允许用户从预定义的时间范围内选择一个时间。这对于需要精确到小时和分钟(甚至秒)的场景非常有用,如会议安排、闹钟设置等。

功能特点:

时间格式:通过format属性,可以设置时间显示的格式,如仅显示小时和分钟,或包含秒。默认时间:selected属性允许你设置默认选中的时间。时间制:useMilitaryTime属性允许你选择是否使用24小时制。循环模式:loop属性决定滚动时间时是否循环显示。样式定制:与时间选择器文本相关的样式同样可以通过disappearTextStyle、textStyle和selectedTextStyle属性进行定制。事件监听:onChange事件在时间选择改变时触发,允许你执行一些操作,如更新UI或发送数据。

实现示例:

在TimePickerExample组件中,我们实现了一个可以切换12小时制和24小时制的时间选择器。用户点击“切换12小时制/24小时制”按钮时,isMilitaryTime状态会反转,从而改变时间选择器的显示模式。同时,我们监听onChange事件来更新选中的时间,并在控制台打印选中的时间对象(通过JSON.stringify转换为字符串形式)。

完整案例

//时间选择器
// xxx.ets
@Component
struct TimePickerExample {
  @State isMilitaryTime: boolean = false
  private selectedTime: Date = new Date('2022-07-22T08:00:00')
​
  build() {
    Column() {
      Button('切换12小时制/24小时制')
        .margin(30)
        .onClick(() => {
          this.isMilitaryTime = !this.isMilitaryTime
        })
      //时间选择组件
      TimePicker({
        //显示秒    默认显示时分
        format: TimePickerFormat.HOUR_MINUTE_SECOND,
        //默认指定时间
        selected: this.selectedTime,
      })//
        //设置时分秒前面是否显示0   12小时制 时默认为numeric即不显示0,,24小时制默认显示
        .dateTimeOptions({})//
          //是否启用循环模式
        .loop(true)//
          // 改变显示时制  false 12小时制  true 24小时制
        .useMilitaryTime(this.isMilitaryTime)
        .onChange((value: TimePickerResult) => {
          if (value.hour >= 0) {
            this.selectedTime.setHours(value.hour, value.minute)
            console.info('select current date is: ' + JSON.stringify(value)) //JSON.stringify(value)  转化为字符串形式
          }
        })//
          //边缘文本样式
        .disappearTextStyle({ color: '#ff182431', font: { size: 15, weight: FontWeight.Lighter } })
         //选择器未选中且不在边缘的文本样式
        .textStyle({ color: Color.Black, font: { size: 20, weight: FontWeight.Normal } })//
          //选中文本样式
        .selectedTextStyle({ color: Color.Blue, font: { size: 30, weight: FontWeight.Bolder } })
    }.width('100%')
  }
}

#### 总结

通过ArkTS的DatePicker和TimePicker组件,开发者可以轻松地实现日期和时间的选择功能,并通过丰富的样式定制和事件监听来满足不同的需求。无论是需要用户输入日程安排的日期,还是设置闹钟的具体时间,这些组件都能提供便捷和灵活的解决方案。希望这篇文章能帮助你更好地理解和使用ArkTS中的日期和时间选择器组件。

注:代码源自华为开发者文档,想获得更详细的信息 请前往