8.7 发布—WinterCG 兼容性第一部分
了解更多

在 GitHub 上查看

@nativescript/datetimepicker

一个提供 UI 元素 DatePickerFieldTimePickerFieldDateTimePickerFields 用于选择日期和时间的插件。DatePickerFieldTimePickerField 组件扩展了 TextField 视图,而 DateTimePickerFields 扩展了 GridLayout 布局容器,该容器包含 DatePickerFieldTimePickerField 组件的实例。还有一个 DateTimePicker 类,它提供了静态方法 pickDate()pickTime(),可以调用它们来显示与字段相同的对话框选择器。

DatePickerField on iOS (left) and Android (right)TimePickerField on iOS (left) and Android (right)

目录

安装

cli
npm install @nativescript/datetimepicker

使用 @nativescript/datetimepicker

核心

  1. 使用 Page 的 xmlns 属性注册插件命名空间,提供您的前缀(例如 datetime),并将它的值设置为插件名称。

    xml
    <Page
      xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:datetime="@nativescript/datetimepicker"
    ></Page>
  2. 通过前缀访问 datePickerField 视图。

    xml
    <Page
      xmlns="http://schemas.nativescript.org/tns.xsd"
      xmlns:datetime="@nativescript/datetimepicker"
    >
      <datetime:DatePickerField hint="select date"></datetime:DatePickerField>
      <datetime:TimePickerField hint="select time"></datetime:TimePickerField>
      <datetime:DateTimePickerFields
        hintDate="select date"
        hintTime="select time"
      ></datetime:DateTimePickerFields>
    </Page>

Angular

  1. 通过将插件的 NativeScriptDateTimePickerModule 添加到包含要使用 DatePickerField 的组件的模块的 imports 数组中来注册插件。

    ts
    import { NativeScriptDateTimePickerModule } from '@nativescript/datetimepicker/angular'
    
    @NgModule({
      imports: [
        NativeScriptCommonModule,
        NativeScriptDateTimePickerModule,
        // ...
      ],
      // ...
    })
  2. 在标记中按如下方式使用 DatePickerField

    xml
    <DatePickerField hint="select date"></DatePickerField>
    <TimePickerField hint="select time"></TimePickerField>
    <DateTimePickerFields
      hintDate="select date"
      hintTime="select time"
    ></DateTimePickerFields>

Vue

  1. 安装插件后,在 main.ts 文件中将其注册到您的应用项目,以实现全局访问。

    ts
    import DateTimePicker from '@nativescript/datetimepicker/vue'
    
    import Home from './components/Home.vue'
    
    const app = createApp(Home).use(DateTimePicker)
    
    app.start()
  2. template 中按如下方式使用 DatePickerField

    xml
    <DatePickerField hint="select date" />
    <TimePickerField hint="select time" />
    <DateTimePickerFields hintDate="select date" hintTime="select time" />

Svelte

安装插件后,在 app.ts 文件中将 DateTimePickerFields 注册到您的应用。

ts
registerNativeViewElement(
  'dateTimePickerFields',
  () => require('@nativescript/datetimepicker').DateTimePickerFields
)

接下来,通过添加 dateTimePickerFields 元素,在标记中使用选择器。

xml
<dateTimePickerFields hintDate="pick a date" hintTime="pick time"></dateTimePicker>

设置选定的日期和时间

要设置 TimePickerField 的选定时间,请使用 time 属性。

xml
<TimePickerField time="01:00"></TimePickerField>

DatePickerFieldDateTimePickerFields 组件都使用 date 属性来设置它们的选定日期(以及 DateTimePickerFields 的时间)值。

xml
<DatePickerField date="2019/02/24"></DatePickerField>

<DateTimePickerFields date="2019/02/24 01:00"></DateTimePickerFields>

更改选择器标题和按钮标签

要更改选择器弹出窗口的标题和按钮标签,请使用 pickerOkTextpickerCancelTextpickerTitle 属性。

xml
<DatePickerField
  hint="tap to choose"
  pickerOkText="Approve"
  pickerCancelText="Reject"
  pickerTitle="Confirm predefined date selection"
  pickerDefaultDate="2019/05/15"
></DatePickerField>

DateTimePickerFields 还有 pickerTitleDate 用于日期选择器标题,以及 pickerTitleTime 用于时间选择器标题。

xml
<DateTimePickerFields
  hintDate="tap to choose date"
  hintTime="tap to choose time"
  pickerOkText="Approve"
  pickerCancelText="Reject"
  pickerTitleDate="Confirm predefined date selection"
  pickerTitleTime="Confirm predefined time selection"
  pickerDefaultDate="2019/05/15 22:00"
  autoPickTime="true"
></DateTimePickerFields>

设置本地化

要本地化 DatePickerFieldDateTimePickerFields 组件,请使用 locale 属性。

xml
<DatePickerField locale="en_GB" hint="select date"></DatePickerField>
<!-- DateTimePickerFields -->
<DateTimePickerFields
  locale="de_DE"
  hintDate="datum auswählen"
  hintTime="zeit wählen"
  pickerOkText="Bestätigen"
  pickerCancelText="Stornieren"
  pickerTitleDate="Datum auswählen"
  pickerTitleTime="Zeit wählen"
></DateTimePickerFields>

格式化日期和时间

除了取决于 locale 属性值的默认格式之外,您还可以添加自定义格式,其中可以包含日期/时间值的排序以及自定义文本。要自定义日期格式,请使用 dateFormat 属性。

xml
<DatePickerField
  date="2019/02/24"
  dateFormat="'my date': dd-MMMM-yyyy"
></DatePickerField>

TimePickerField 将根据 iOS 设备设置中的选定区域以及 Android 设备的“使用 24 小时制”设置来确定使用 12 小时制还是 24 小时制(用于格式化字段中选定的时间以及小时微调器的值)。要更改 Android 上的默认设置,您需要使用 timeFormat 属性,要更改 iOS 上的设置,您需要使用 locale 属性。

xml
<TimePickerField
  time="16:00"
  timeFormat="h:mm a"
  locale="en_US"
></TimePickerField>

对于 DateTimePickerFields 选择器,使用相同的属性(dateFormattimeFormatlocale)来进行自定义日期和时间格式。

xml
<DateTimePickerFields
  date="2019/02/24 16:00"
  timeFormat="h:mm a"
  locale="en_US"
></DateTimePickerFields>

设置最小日期和最大日期

要设置最小日期和最大日期,请对 DatePickerFieldDateTimePickerFields 组件使用 minDatemaxDate 属性。

xml
<DatePickerField
  minDate="2020/02/02"
  maxDate="2021/02/02"
  hint="tap to select"
></DatePickerField>
<!-- DateTimePickerFields -->
<DateTimePickerFields
  minDate="2020/02/02"
  maxDate="2021/02/02"
  hintDate="tap to select date"
  hintTime="tap to select time"
></DateTimePickerFields>

设置 DateTimePickerFields 选择器的布局

要将选择器字段水平(默认)或垂直排列,请使用 orientation 属性。

xml
<DateTimePickerFields
  hintDate="select date"
  hintTime="select time"
  orientation="vertical"
></DateTimePickerFields>

使用 CSS 样式化选择器

您可以使用 CSS 来样式化 DatePickerFieldTimePickerField 选择器。相同的样式适用于 DateTimePickerFields 组件中包含的选择器。选择器支持通过以下预定义的 CSS 类更改其颜色

  • date-time-picker:选择器背景和标题文本颜色)
  • date-time-picker-spinners:日期/时间选择微调器的背景和文本颜色
  • date-time-picker-buttons:确定/取消按钮的背景和文本颜色
  • date-time-picker-button-okdate-time-picker-button-cancel:为每个按钮提供单独的样式。

注意

iOS 本机实现对按钮背景颜色的支持有限。当一个按钮被标记为取消按钮时,它的背景始终为白色,无法更改。如果您确实需要一个带有其他颜色的取消按钮,您可以通过指定的取消按钮类传递背景颜色,但是这会更改选择器布局,并将取消按钮与确定按钮一起放置,它们都将具有相同的背景颜色。

DatePickerField with CSS applied on iOS (left) and Android (right)
css
timepickerfield,
datepickerfield {
  padding: 12 4;
}

timepickerfield.apply-css,
datepickerfield.apply-css {
  color: #cddc39;
  background-color: #00796b;
  font-size: 20;
  font-weight: bold;
  padding: 20;
}

.date-time-picker.apply-css {
  color: #00796b;
  background-color: #cddc39;
}

.date-time-picker-spinners.apply-css {
  color: #cddc39;
  background-color: #00796b;
}

.date-time-picker-buttons.apply-css {
  color: #00796b;
}

要在打开 DateTimePicker 时在运行时应用样式,您可以执行以下操作

ts
import {
  DateTimePicker,
  DateTimePickerStyle,
} from '@nativescript/datetimepicker'
import { Application, View } from '@nativescript/core'

function createPicker(args: EventData) {
  const dateTimePickerStyle = DateTimePickerStyle.create(args.object as any)

  // This example handles styling the calendar for light and dark mode of the device settings
  if (Application.systemAppearance() === 'dark') {
    // style for dark mode
    dateTimePickerStyle.buttonsBackgroundColor = new Color('#202125')
    dateTimePickerStyle.dialogBackgroundColor = new Color('#202125')
    dateTimePickerStyle.titleTextColor = new Color('#fff')
    dateTimePickerStyle.buttonsTextColor = new Color('#0067a6')
    dateTimePickerStyle.spinnersBackgroundColor = new Color('#202125')
    dateTimePickerStyle.spinnersTextColor = new Color('#fff')
  } else {
    // style for light mode
    dateTimePickerStyle.buttonsBackgroundColor = new Color('#fff')
    dateTimePickerStyle.dialogBackgroundColor = new Color('#fff')
    dateTimePickerStyle.titleTextColor = new Color('#0067a6')
    dateTimePickerStyle.buttonsTextColor = new Color('#0067a6')
    dateTimePickerStyle.spinnersBackgroundColor = new Color('#fff')
    dateTimePickerStyle.spinnersTextColor = new Color('#0067a6')
  }

  DateTimePicker.pickDate(
    {
      context: (args.object as View)._context,
      minDate: new Date((new Date() as any) - 1),
      title: 'DatePicker',
      okButtonText: 'Okay',
      cancelButtonText: 'Cancel',
      locale: 'es',
    },
    dateTimePickerStyle
  ).then((result) => {
    // handle the result
  })
}

手动创建自定义选择器

在内部,DatePickerFieldTimePickerField 调用 DateTimePicker 类的 pickDatepickTime 方法,它们是公开的。您可以通过手动调用这些方法来创建自定义选择器。pickDate 方法接受 DatePickerOptions,而 pickTime 方法接受 TimePickerOptions

ts
function onPickDateTap(args: EventData) {
  const dateToday = new Date()
  const dateTomorrow = new Date(
    dateToday.getFullYear(),
    dateToday.getMonth(),
    dateToday.getDate() + 1
  )
  const dateNextWeek = new Date(
    dateToday.getFullYear(),
    dateToday.getMonth(),
    dateToday.getDate() + 7
  )

  DateTimePicker.pickDate({
    context: args.object._context,
    date: dateTomorrow,
    minDate: dateTomorrow,
    maxDate: dateNextWeek,
    okButtonText: 'OK',
    cancelButtonText: 'Cancel',
    title: 'choose date',
    locale: 'en_GB',
  }).then((selectedDate) => {
    if (selectedDate) {
      this.dateText = this.getFormattedDate(selectedDate)
    }
  })
}
ts
function onPickTimeTap(args: EventData) {
  const dateToday = new Date()
  const dateTomorrow = new Date(
    dateToday.getFullYear(),
    dateToday.getMonth(),
    dateToday.getDate() + 1
  )
  dateTomorrow.setHours(8)
  dateTomorrow.setMinutes(0)
  DateTimePicker.pickTime({
    context: args.object._context,
    time: dateTomorrow,
    okButtonText: 'OK',
    cancelButtonText: 'Cancel',
    title: 'choose time',
    locale: 'en_GB',
    is24Hours: true,
  }).then((selectedTime) => {
    if (selectedTime) {
      this.timeText = this.getFormattedTime(selectedTime)
    }
  })
}

API

DatePickerField

属性类型描述
date日期选择器字段当前显示的日期。在标记中使用时,提供的字符串将传递给 Date 构造函数 以创建一个新的 Date 对象。
minDate日期选择器字段可以选择的最早日期。
maxDate日期选择器字段可以选择的最晚日期。
locale字符串用于本地化月份名称以及微调器顺序的区域设置标识符(使用 en_GB 时,第一个微调器是日期,使用 en_US 时,第一个微调器是月份)(默认值基于设备的区域设置)。
hint字符串获取或设置提示文本。提示是在 date 为 null 时显示在字段中的文本。
dateFormat字符串用于选择器字段中文本的格式(在 android 上用作 SimpleDateFormat 的模式,在 iOS 上用作 NSDateFormatter 的 dateFormat,默认值由 locale 属性的当前值生成)。
pickerTitle字符串将显示为选择器标题的文本,默认值为 undefined。
pickerOkText字符串选择器的确认按钮的文本(默认值为 iOS 上的 OK,Android 上的 OK 的本地化版本(基于设备的区域设置))。
pickerCancelText字符串选择器的取消按钮的文本(默认值为 iOS 上的 Cancel,Android 上的 Cancel 的本地化版本(基于设备的区域设置))。

TimePickerField

属性类型描述
time日期选择器字段当前显示的时间。如果它以 ISO 8601 格式,它将传递给 JS Date 构造函数。
locale字符串获取或设置用于在字段中显示日期的区域设置,以及选择器。默认值为 undefined,这意味着格式将基于设备的设置。
hint字符串获取或设置提示文本。提示是在 time 为 null 时显示在字段中的文本。
timeFormat字符串选择器字段中使用的文本格式(在 Android 上用作 SimpleDateFormat 的模式,在 iOS 上用作 NSDateFormatter 的 dateFormat,默认由 locale 属性的当前值生成),该格式也将用于 Android 来确定选择器是使用 12 小时制还是 24 小时制。
pickerTitle字符串将显示为选择器标题的文本,默认值为 undefined。
pickerOkText字符串选择器确认按钮的文本(默认在 iOS 上为 OK,在 Android 上为 OK 的本地化版本(基于设备的区域设置)。
pickerCancelText字符串选择器取消按钮的文本(默认在 iOS 上为 Cancel,在 Android 上为 Cancel 的本地化版本(基于设备的区域设置)。

DateTimePickerFields

属性类型描述
date日期选择器字段当前显示的日期。
minDate日期获取或设置最小日期。请注意,此属性仅影响日期部分。
maxDate日期获取或设置最大日期。请注意,此属性仅影响日期部分。
locale字符串获取或设置用于在字段和选择器中显示日期的区域设置。
默认值为 undefined,这意味着格式将基于设备的设置。
请注意,更改区域设置不会影响 pickerOkTextpickerCancelTextpickerTitlehint 属性。
dateFormat字符串选择器字段中使用的文本格式(在 Android 上用作 SimpleDateFormat 的模式,在 iOS 上用作 NSDateFormatter 的 dateFormat,默认由 locale 属性的当前值生成)。
timeFormat字符串选择器字段中使用的文本格式(在 Android 上用作 SimpleDateFormat 的模式,在 iOS 上用作 NSDateFormatter 的 dateFormat,默认由 locale 属性的当前值生成),该格式也将用于 Android 来确定选择器是使用 12 小时制还是 24 小时制。
pickerTitleDate字符串当点击日期部分时,将显示为选择器标题的文本。
pickerTitleTime字符串当点击时间部分时,将显示为选择器标题的文本。
pickerOkText字符串选择器确认按钮的文本(默认在 iOS 上为 OK,在 Android 上为 OK 的本地化版本(基于设备的区域设置)。
pickerCancelText字符串选择器 Cancel 按钮的文本(默认在 iOS 上为 Cancel,在 Android 上为 Cancel 的本地化版本(基于设备的区域设置)。
autoPickTimeboolean指示是否应在日期部分选择日期后立即为时间部分分配值的布尔值。默认为 false
orientation'horizontal' | 'vertical'指示日期和时间部分将如何排列的值,默认值为“horizontal”,这意味着它们将位于同一行。
hintDate字符串datenull 时,在日期部分显示的文本。
hintTime字符串datenull 时,在时间部分显示的文本。

DateTimePicker Class

方法返回类型描述
pickDate(options: DatePickerOptions, style?: DateTimePickerStyle)Promise<Date>从使用提供的选项初始化并使用可选提供的样式设置样式的对话框选择器中选择日期。
pickTime(options: TimePickerOptions, style?: DateTimePickerStyle)Promise<Date>从使用提供的选项初始化并使用可选提供的样式设置样式的对话框选择器中选择时间。

DatePickerOptions

属性类型描述
contextany视图的上下文。从视图实例的 _context 属性获取。
date日期可选:将在选择器中显示的日期(如果未提供,选择器将显示今天)。
minDate日期可选:可以选择的最早日期。
maxDate日期可选:可以选择的最晚日期。
locale字符串可选:用于本地化月份名称和 AM/PM 文本的区域设置标识符。
title字符串可选:将显示为选择器标题的文本。
okButtonText字符串可选:选择器确认按钮的文本(默认在 iOS 上为 OK,在 Android 上为 OK 的本地化版本(基于设备的区域设置)。
cancelButtonText字符串可选:选择器取消按钮的文本(默认在 iOS 上为 Cancel,在 Android 上为 Cancel 的本地化版本(基于设备的区域设置)。

TimePickerOptions

属性类型描述
contextany视图的上下文。从视图实例的 _context 属性获取。
time日期可选:将在选择器中显示的时间(如果未提供,选择器将显示现在)。
is24Hoursboolean可选:此值仅在 Android 上使用,用于确定选择器是使用 12 小时制还是 24 小时制。
locale字符串可选:用于本地化月份名称和 AM/PM 文本的区域设置标识符。
title字符串可选:将显示为选择器标题的文本。
okButtonText字符串可选:选择器确认按钮的文本(默认在 iOS 上为 OK,在 Android 上为 OK 的本地化版本(基于设备的区域设置)。
cancelButtonText字符串可选:选择器取消按钮的文本(默认在 iOS 上为 Cancel,在 Android 上为 Cancel 的本地化版本(基于设备的区域设置)。

DateTimePickerStyle

属性类型描述
titleTextColor颜色用于标题文本的颜色。
dialogBackgroundColor颜色用作对话框选择器背景的颜色。
spinnersTextColor颜色用于日期/时间选择器文本的颜色。
spinnersBackgroundColor颜色用作日期/时间选择器背景的颜色。
buttonsTextColor颜色用于确定/取消按钮文本的颜色。
buttonsBackgroundColor颜色用作确定/取消按钮背景的颜色。
buttonOkTextColor颜色用于确定按钮文本的颜色。
buttonOkBackgroundColor颜色用作确定按钮背景的颜色。
buttonCancelTextColor颜色用于取消按钮文本的颜色。
buttonCancelBackgroundColor颜色用作取消按钮背景的颜色。
create(view: View)DateTimePickerStyle根据提供的任何 CSS 创建样式。参数是一个具有正确设置的 CSS 类名称的视图。

License

Apache License Version 2.0

Previous
Contacts