Android为用户提供控制选择时间或选择日期作为随时可用的对话框的控件。每个选择器提供控制以选择时间(小时,分钟,上午/下午)或日期(月,日,年)的每个部分。使用这些选择器有助于确保您的用户可以选择有效,格式正确的时间或日期,并根据用户的区域设置进行调整。

我们建议您使用DialogFragment托管每个时间或日期选择器。在DialogFragment为您管理对话框的生命周期,并允许您以显示不同的布局配置,比如在手机上一个基本的对话或在大屏幕上布局的预埋件的采摘。

虽然DialogFragment首次在Android 3.0(API级别11)中添加到平台,但如果您的应用支持早于3.0的Android版本 - 甚至低至Android 1.6 - 您可以使用支持库中DialogFragment提供的类来向后兼容

注意:下面的代码示例显示了如何使用支持库 API为时间选择器和日期选择器创建对话框DialogFragment。如果您的应用minSdkVersion是11或更高,您可以使用平台版本DialogFragment。

关键类如下:

DatePickerDialog
TimePickerDialog
另请参阅碎片概述。

创建时间选择器


要显示TimePickerDialogusing DialogFragment,您需要定义一个片段类,它扩展DialogFragment并TimePickerDialog从片段的onCreateDialog()方法返回一个。

注意:如果您的应用支持早于3.0的Android版本,请确保使用支持库设置Android项目,如设置要使用库的项目中所述。

为时间选择器扩展DialogFragment

要定义DialogFragment的TimePickerDialog,你必须:

定义onCreateDialog() 返回实例的方法TimePickerDialog
实现 TimePickerDialog.OnTimeSetListener接口以在用户设置时间时接收回调。
这是一个例子:

public static class TimePickerFragment extends DialogFragmentimplements TimePickerDialog.OnTimeSetListener {@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {// Use the current time as the default values for the pickerfinal Calendar c = Calendar.getInstance();int hour = c.get(Calendar.HOUR_OF_DAY);int minute = c.get(Calendar.MINUTE);// Create a new instance of TimePickerDialog and return itreturn new TimePickerDialog(getActivity(), this, hour, minute,DateFormat.is24HourFormat(getActivity()));}public void onTimeSet(TimePicker view, int hourOfDay, int minute) {// Do something with the time chosen by the user}
}

有关TimePickerDialog构造函数参数的信息,请参阅该类。

现在您只需要一个事件,将此片段的实例添加到您的活动中。

显示时间选择器

一旦定义了DialogFragment如上所示的那个,就可以通过创建DialogFragment和调用实例来显示时间选择器show()。

例如,这是一个按钮,当单击它时,调用一个方法来显示对话框:

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/pick_time"android:onClick="showTimePickerDialog" />

当用户单击此按钮时,系统将调用以下方法:

public void showTimePickerDialog(View v) {DialogFragment newFragment = new TimePickerFragment();newFragment.show(getSupportFragmentManager(), "timePicker");
}

此方法调用上面定义show()的新实例DialogFragment。该show()方法需要FragmentManager片段的实例和唯一标记名称。

警告:如果您的应用支持的Android版本低于3.0,请确保您致电getSupportFragmentManager()获取实例 FragmentManager。还要确保显示时间选择器的活动扩展FragmentActivity而不是标准Activity类。

创建日期选择器


创建一个DatePickerDialog就像创建一个TimePickerDialog。唯一的区别是您为片段创建的对话框。

要显示DatePickerDialogusing DialogFragment,您需要定义一个片段类,它扩展DialogFragment并DatePickerDialog从片段的onCreateDialog()方法返回一个。

为日期选择器扩展DialogFragment

要定义DialogFragment的DatePickerDialog,你必须:

定义onCreateDialog() 返回实例的方法DatePickerDialog
实现 DatePickerDialog.OnDateSetListener接口以在用户设置日期时接收回调。
这是一个例子:

public static class DatePickerFragment extends DialogFragmentimplements DatePickerDialog.OnDateSetListener {@Overridepublic Dialog onCreateDialog(Bundle savedInstanceState) {// Use the current date as the default date in the pickerfinal Calendar c = Calendar.getInstance();int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH);int day = c.get(Calendar.DAY_OF_MONTH);// Create a new instance of DatePickerDialog and return itreturn new DatePickerDialog(getActivity(), this, year, month, day);}public void onDateSet(DatePicker view, int year, int month, int day) {// Do something with the date chosen by the user}
}

有关DatePickerDialog构造函数参数的信息,请参阅该类。

现在您只需要一个事件,将此片段的实例添加到您的活动中。

显示日期选择器

一旦定义了DialogFragment如上所示的那个,就可以通过创建DialogFragment和调用的实例来显示日期选择器show()。

例如,这是一个按钮,当单击它时,调用一个方法来显示对话框:

<Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/pick_date"android:onClick="showDatePickerDialog" />

当用户单击此按钮时,系统将调用以下方法:

public void showDatePickerDialog(View v) {DialogFragment newFragment = new DatePickerFragment();newFragment.show(getSupportFragmentManager(), "datePicker");
}

此方法调用上面定义show()的新实例DialogFragment。该show()方法需要FragmentManager片段的实例和唯一标记名称。

使用自动填充的拣货员


Android 8.0引入了自动填充框架,允许用户保存以后可用于填写不同应用程序中的表单的数据。通过提供允许用户更改存储日期或时间数据的字段值的UI,选择器在自动填充场景中非常有用。例如,在信用卡表格中,日期选择器将允许用户输入或更改其信用卡的到期日期。

由于选取器是对话框,因此它们不会与其他字段一起显示在活动中。要在选择器不可见时显示选取器数据,您可以使用另一个视图,例如EditText,可以在选择器不可见时显示该值。

一个EditText对象本身期望类型的自动填充数据AUTOFILL_TYPE_TEXT。相反,自动填充服务应该保存数据,AUTOFILL_TYPE_DATE以便能够创建适当的表示。要解决类型不一致的问题,建议您创建一个自定义视图,该视图继承EditText并实现正确处理类型值所需的方法AUTOFILL_TYPE_DATE。

您应该采取以下步骤来创建EditText可以处理类型值的子类AUTOFILL_TYPE_DATE:

创建一个继承自的类EditText。
实现getAutofillType()应该返回的方法AUTOFILL_TYPE_DATE。
实现该getAutofillValue()方法,该方法应返回AutofillValue表示日期的对象(以毫秒为单位)。要创建返回对象,请使用该 forDate()方法生成AutofillValue对象。
实施autofill() 方法。此方法提供处理AutofillValue参数的逻辑,该参数属于类型AUTOFILL_TYPE_DATE。要处理参数,请为其创建正确的字符串表示形式,例如mm/yyyy。使用字符串表示来设置text视图的属性。
当用户想要编辑自定义子类中的日期时,实现显示选择器的功能EditText。视图应text使用用户在选择器上选择的值的字符串表示更新属性。
为的子类的实例EditText,处理 AUTOFILL_TYPE_DATE值,请参阅CreditCardExpirationDatePickerView 中类的Android自动填充框架样品。

要了解有关为自定义视图验证自动填充支持的详细信息,请参阅支持自定义视图。

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

转载于:https://blog.51cto.com/4789781/2152017

【Interfacenavigation】选择时间/日期组件(34)相关推荐

  1. php 今天 明天 后天 显示10天,【微信小程序】实现含有今天,明天,后天的日期组件...

    封面图.JPG 前言 做过微信小程序的前端er都知道,小程序有个日期组件,叫picker,但是,需求方要求日期和时间都要显示的,用picker组件的话,那就用到两个picker,date和time,就 ...

  2. antd的日期组件,月和周、年突然变成英文的修复

    本来好好的项目,突然间日期组件有夹杂英文了,懵了,后来一查 重新用yarn add moment,安装一下moment就行了

  3. elementUI时间日期组件设置的默认时间在ie中无法重置

    在使用elementUI的时间日期组件时往往会设置一个默认时间,此时如果同时设置了placeholder属性,在第一次进入页面时直接重置,调用elementUI的重置表单方法resetField,在I ...

  4. ElementUI日期组件(DatePicker )图标定制

    1.问题 elementUI默认日期组件是这样的: 想要的效果 : 需要修改的有两处: 1.将'至'换成箭头图标 2.将左侧的icon移动到右边 2.解决 总共需要修改的只有三处 template修改 ...

  5. 模块开发之时间/日期组件moment.js使用(十四)

    文章目录 前言 基本使用 moment与字符串想到转换 当前时间 语法 创建moment实例的方式 时间字符串+指定格式 时间字符串+多定格式 moment完全支持iso-8601格式字符串 以对象形 ...

  6. Material Design 2日期组件显示汉化 ,materia时间组件国际化,md2 时间组件汉化

    解决md2的Datepicker显示中文问题,主要有二种方式. 方式一修改源代码,这种方式不推荐 方式二:在使用日期组件的地方,或直接在app.component.ts中构造方法中修改里面month. ...

  7. iview DatePicker日期组件禁止选择今天之后的日期 不包括今天

    1.日期组件 <DatePicker type="date" :options="options" placeholder="请选择日期&quo ...

  8. vantUI日期组件的使用

    vantUI日期组件的使用 <template><!-- 选择日期框开始--><div class="myDateInput"><h5&g ...

  9. elementui中日期组件,日期图标在右边,有删除图标(完整代码)

    效果图: 日期组件完整代码: <template><div class="date-picker"><el-date-pickerv-model=&q ...

最新文章

  1. Android开发人员不得不收集的代码,值得收藏!
  2. 【转载】笛卡尔转极坐标
  3. Serval and Bus
  4. oracle 11gR2 新增deinstall命令来卸载grid和database
  5. 循环的中断操作(C#基础回顾03)
  6. Problem B: 编写函数:求最大公约数gcd()和最小公倍数lcm() (Append Code) 山东科技大学 oj
  7. 小C的数学问题 线段树+分治
  8. python显示运行时间_python程序运行进程、使用时间、剩余时间显示功能的实现代码...
  9. 计算机保研-中科大计算机
  10. java__斐波那契数列
  11. 国产自主可控智慧会议系统解决方案-移动无纸化会议
  12. 2017年上半年软件工程师考试--程序员(上午)考点总结二
  13. electron下载失败_解决方案汇总
  14. 证券市场基础知识(三)——回购市场
  15. ARP攻击-流量分析
  16. 计算机pe启动蓝屏怎么办,U盘重装系统进入PE蓝屏怎么办
  17. Levenberg-Marquardt method for nonlinear elliptical equation
  18. 如何检测、清理Greenplum膨胀、垃圾
  19. 安装ut2004, usarsim on linux
  20. 使用Pygame制作2048小游戏

热门文章

  1. 【引用】Android程序实现完全退出
  2. “==”和equals方法的区别
  3. ON REG EXPRESSION.SYNTAX
  4. 使用Javaweb开发大学生综合素质测评系统
  5. 基于JavaWeb实现网上花店商城系统
  6. [E::fai_build_core] Different line length in sequence ‘kraken:taxid|436|NZ_CP062147.1‘
  7. 【经典算法必读】图片分类系列之(一): 你真的了解图片分类(Image Classification)吗?...
  8. 在目录下所有文件中查找字符串
  9. 半吊子菜鸟学Web开发 -- PHP学习 4 --异常
  10. Swift实战-QQ在线音乐(第二版)