Android开发之日期时间控件选择

article/2025/9/23 3:35:34

Android开发之日期时间控件选择

文章目录

  • 前言
  • 一、创建弹出Layout
    • 1.1 新建Layout,修改样式为LinearLayout
    • 1.2 Layout中添加日期和时间控件
  • 二、新建DateTimeDialog
    • 2.1 创建静态方法
      • 2.1.1 创建SetDateDialog,用于选择日期
      • 2.1.2 SetDateDialog中绑定textView的click事件
    • 2.2 引用
  • 三. 总结


前言

整合Android原生控件(日期控件DatePicker、时间控件TimePicker)实现选择日期、时间绑定。
本文仅仅是一种参考,不光是时间控件,自定义的Layout一样可以采用这种方式。
涉及技术要点:
1.控件事件绑定
2.弹出框AlertDialog
3.日期格式化SimpleDateFormat
弹出效果图


一、创建弹出Layout

1.1 新建Layout,修改样式为LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"></LinearLayout>

1.2 Layout中添加日期和时间控件

注意需要将控件的calendarViewShown指定为false及datePickerMode属性指定为spinner

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><DatePickerandroid:id="@+id/dialog_datetime_date_picker"android:layout_width="match_parent"android:layout_height="wrap_content"android:calendarViewShown="false"android:datePickerMode="spinner"/><TimePickerandroid:id="@+id/dialog_datetime_time_picker"android:layout_width="match_parent"android:layout_height="wrap_content"android:calendarViewShown="false"android:datePickerMode="spinner" /></LinearLayout>

二、新建DateTimeDialog

创建DateTimeDialog类是为了将方法封装,以便我项目多次调用

public class DateTimeDialog {}

2.1 创建静态方法

2.1.1 创建SetDateDialog,用于选择日期

public static void SetDateDialog(Context context, Activity activity, TextView textView, String... title) {
}

这里我们将引用控件的context、activity作为参数传入方法中,方便我们动态加载Layout和指定AlertDialog弹出所在的Activity,避免弹出框无法显示。
textView参数为需要绑定选择的控件,并且在选择之后,会将选择的日期返回给textView
titile是可选参数,指定弹出框的标题,不指定的话,会默认为“选择日期”

2.1.2 SetDateDialog中绑定textView的click事件

给textView绑定事件后,在用户点击控件时即可执行相应的事件内容,在此我们需要的是用户点击控件时,弹出日期选择框。

textView.setOnClickListener(view -> {AlertDialog.Builder builder = new AlertDialog.Builder(activity);builder.setView(view1);builder.create().show();
});

由于我们的控件中含有时间控件,需要隐藏

            View view1 = LayoutInflater.from(context).inflate(R.layout.dialog_datetime, null);final TimePicker timePicker = view1.findViewById(R.id.dialog_datetime_time_picker);timePicker.setVisibility(View.GONE);

如果textView有默认值,则在弹出的时候需要将textView的日期带入弹出框中

            final DatePicker datePicker = view1.findViewById(R.id.dialog_datetime_date_picker);Calendar calendar;String strDate = textView.getText().toString();calendar = convertDateToCalendar(strDate);datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), null);

设置弹出框的标题

            if (title != null && title.length > 0) {builder.setTitle(title[0]);} elsebuilder.setTitle("选择日期");

实现弹出框的按钮事件:
点击确定时,绑定值给textView,并关闭弹窗;点击取消时,直接关闭天窗;点击现在时,将当前时间传给textView,并关闭弹窗。

            builder.setPositiveButton("确 定", (dialog, i) -> {//日期格式int year = datePicker.getYear();int month = datePicker.getMonth() + 1;int dayOfMonth = datePicker.getDayOfMonth();textView.setText(String.format(Locale.getDefault(), "%d年%d月%d日 ", year, month, dayOfMonth));dialog.cancel();});builder.setNegativeButton("取 消", (dialog, which) -> dialog.cancel());builder.setNeutralButton("现 在", (dialog, i) -> {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年M月d日",Locale.getDefault());// HH:mm:ss//获取当前时间Date date = new Date(System.currentTimeMillis());textView.setText(simpleDateFormat.format(date));dialog.cancel();});

以下是完整代码:

    public static void SetDateDialog(Context context, Activity activity, TextView textView, String... title) {textView.setOnClickListener(view -> {AlertDialog.Builder builder = new AlertDialog.Builder(activity);View view1 = LayoutInflater.from(context).inflate(R.layout.dialog_datetime, null);final DatePicker datePicker = view1.findViewById(R.id.dialog_datetime_date_picker);final TimePicker timePicker = view1.findViewById(R.id.dialog_datetime_time_picker);timePicker.setIs24HourView(true);Calendar calendar;String strDate = textView.getText().toString();calendar = convertDateToCalendar(strDate);datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), null);timePicker.setHour(calendar.get(Calendar.HOUR_OF_DAY));timePicker.setMinute(calendar.get(Calendar.MINUTE));timePicker.setVisibility(View.GONE);
//            datePicker.setCalendarViewShown(false);//设置Date布局builder.setView(view1);if (title != null && title.length > 0) {builder.setTitle(title[0]);} elsebuilder.setTitle("选择日期");builder.setPositiveButton("确 定", (dialog, i) -> {//日期格式int year = datePicker.getYear();int month = datePicker.getMonth() + 1;int dayOfMonth = datePicker.getDayOfMonth();textView.setText(String.format(Locale.getDefault(), "%d年%d月%d日 ", year, month, dayOfMonth));dialog.cancel();});builder.setNegativeButton("取 消", (dialog, which) -> dialog.cancel());builder.setNeutralButton("现 在", (dialog, i) -> {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年M月d日",Locale.getDefault());// HH:mm:ss//获取当前时间Date date = new Date(System.currentTimeMillis());textView.setText(simpleDateFormat.format(date));dialog.cancel();});builder.create().show();});}

同样的方式我们再实现选择日期时间的方法,具体不再赘述,上代码:

   public static void SetDateTimeDialog(Context context, Activity activity, TextView textView, String... title) {textView.setOnClickListener(view -> {AlertDialog.Builder builder = new AlertDialog.Builder(activity);View view1 = LayoutInflater.from(context).inflate(R.layout.dialog_datetime, null);final DatePicker datePicker = view1.findViewById(R.id.dialog_datetime_date_picker);final TimePicker timePicker = view1.findViewById(R.id.dialog_datetime_time_picker);timePicker.setIs24HourView(true);
//            datePicker.setCalendarViewShown(false);Calendar calendar;String strDate = textView.getText().toString();calendar = convertDateToCalendar(strDate);datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE), null);timePicker.setHour(calendar.get(Calendar.HOUR_OF_DAY));timePicker.setMinute(calendar.get(Calendar.MINUTE));//设置Date布局builder.setView(view1);if (title != null && title.length > 0) {builder.setTitle(title[0]);} elsebuilder.setTitle("选择时间");builder.setPositiveButton("确 定", (dialog, i) -> {//日期格式int year = datePicker.getYear();int month = datePicker.getMonth() + 1;int dayOfMonth = datePicker.getDayOfMonth();int hour = timePicker.getHour();int min = timePicker.getMinute();
//                    timePicker.getSecond();textView.setText(String.format(Locale.getDefault(), "%d年%d月%d日 %d:%d", year, month, dayOfMonth, hour, min));dialog.cancel();});builder.setNegativeButton("取 消", (dialog, which) -> dialog.cancel());builder.setNeutralButton("现 在", (dialog, i) -> {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年M月d日 HH:mm", Locale.getDefault());// HH:mm:ss//获取当前时间Date date = new Date(System.currentTimeMillis());textView.setText(simpleDateFormat.format(date));dialog.cancel();});builder.create().show();});}

文中提到的convertDateToCalendar是笔者用于日期转换的,您可以根据自己的需要去灵活实现

    private static Calendar convertDateToCalendar(String strDate) {int year;int month;int day;int hour;int minute;Calendar calendar = Calendar.getInstance();//获取当前时间Date date = new Date(System.currentTimeMillis());calendar.setTime(date);
//        calendar.add(Calendar.MONTH,1);year = calendar.get(Calendar.YEAR);month = calendar.get(Calendar.MONTH);day = calendar.get(Calendar.DATE);hour = calendar.get(Calendar.HOUR_OF_DAY);minute = calendar.get(Calendar.MINUTE);if (strDate != null && !strDate.equals("")) {if (strDate.contains(":")) {strDate = strDate.split(":")[1];}strDate = strDate.replace("年", "-").replace("月", "-").replace("日", "").replace(".", "").replace(" ", "-").replace(":", "-");Log.d("liuwz", "convertDateToCalendar: "+strDate);if (strDate.split("-").length >= 3) {year = Integer.parseInt(strDate.split("-")[0]);month = Integer.parseInt(strDate.split("-")[1]);day = Integer.parseInt(strDate.split("-")[2]);if (strDate.split("-").length >= 5) {hour = Integer.parseInt(strDate.split("-")[3]);minute = Integer.parseInt(strDate.split("-")[4]);}calendar.set(year, month, day, hour, minute);calendar.add(Calendar.MONTH, -1);} else if (strDate.split("-").length >= 2) {hour = Integer.parseInt(strDate.split("-")[0]);minute = Integer.parseInt(strDate.split("-")[1]);calendar.set(year, month, day, hour, minute);}}return calendar;}

至此已经大功告成,下面看下如何引用

2.2 引用

在任意需要用到选择时间的Activity的onCreate方法中添加下面一句代码即可:

               DateTimeDialog.SetDateDialog(getApplicationContext(), MainActivity.this, timeSelectView, "请选择日期");

将其中的MainActivity修改为您当前的Activity;将timeSelectView 修改为您页面中的时间TextView或者EditView,“请选择日期”为可选参数,可忽略。

三. 总结

本文仅仅为了使用方便而对AlertDialog进行了封装,用的是Android的原生控件,写在此处仅仅给新入门的朋友们以参考。


http://chatgpt.dhexx.cn/article/U0sqUA6c.shtml

相关文章

Web前端-时间日期控件

需求&#xff1a;同时可以选择 时间 和 日期 通过设置type属性为datetime&#xff0c;即可在同一个选择器里同时进行日期和时间的选择 <template><div class"block"><span class"demonstration">默认</span><el-date-pickerv…

android时间控件

原文地址&#xff1a;http://www.360doc.com/content/14/0617/16/18203124_387517665.shtml 前言 这一篇博客分别讲解Android平台下&#xff0c;关于日期和时间的几个相关控件。包括DatePicker&#xff08;日期选择控件&#xff09;、TimePicker&#xff08;时间选择控件&…

时间控件(选择时间范围的插件)

后台开发&#xff0c;一般都是有筛选条件的查询&#xff0c;那么问题就来了&#xff0c;根据日期范围搜索的情况下&#xff0c;插件要怎么选&#xff1f;&#xff1f;&#xff1f;&#xff1f; 这个是最开始&#xff0c;我采用的是两个时间插件&#xff0c;其他也没啥&#xff…

jQuery时间控件

时间控件 <!DOCTYPE html> <html><head><title></title><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><style>.dateinputer{line-height:40px;height:40px;margin:10px 0;border:1px s…

日期/时间控件DateTimePicker

概述&#xff1a; DateTimePicker外观像一个组合框&#xff0c;用于显示日期和时间。当单击其下拉箭头时&#xff0c;会出现一个按月份显示的日历&#xff0c;用户可以从中选择日期。 1、时期/时间控件的属性 属性说明Format用于设置显示日期/时间的格式&#xff0c;可选以下值…

时间控件

最近做了一些前端的时间控件的应用&#xff0c;下边总结一下用的这些控件。 一 Bootstrap的datetimepicker 1. 首先导入必须的css和js文件 <link href"http://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.2/css/bootstrap-combined.min.css" rel"style…

Chrome vimium 插件

今天发现了一个好玩的Google插件 > vimium直接进入Google官方下载就行&#xff0c;因为我已经下载了&#xff0c;所以后边显示的是评分&#xff0c;没有下载显示的是 添加至Chrome大概意思就是像使用Vim编辑器一样使用Chrome这个是命令文档&#xff0c;翻译不是很难这里就不…

谷歌浏览器chrome翻译插件完美解决开发者模式插件问题

Chrome浏览器之所以让很多人喜欢&#xff0c;是因为它安全、速度快&#xff0c;更重的是它拥有丰富的扩展程序。让普通的浏览器也变得更友好方便。 完美解决谷歌浏览器开发者模式插件弹窗问题 当你在使用一些非谷歌商店认证过的插件、破解过的插件&#xff0c;或者直接使用开发…

谷歌翻译无法使用?Chrome 浏览器翻译插件使用步骤。

原因&#xff1a;由于谷歌翻译停止了在中国服务。导致了Chrome浏览器的翻译功能无法正常使用。 介绍一款开源工具GitHub - Ponderfly/GoogleTranslateIpCheck 1. 原理&#xff1a;检测国内可用的谷歌翻译IP地址&#xff0c;将其添加到本机&#xff0c;通过DNS解析访问谷歌翻译 …

html翻译插件,翻译插件:ImTranslator

ImTranslator的开发背景 在使用chrome阅读网页的时候&#xff0c;经常会遇到一些陌生的外文单词或者语句不熟悉&#xff0c;如果打开外部的翻译软件进行翻译就太麻烦了&#xff0c;今天给大家推荐一款直接在chrome中直接翻译的谷歌浏览器插件&#xff0c;支持多种多种翻译模式和…

教你如何快速的安装Google翻译插件

第一步&#xff1a;下载翻译插件 我这里推荐到-->极简插件_Chrome扩展插件商店_优质crx应用下载 第二步&#xff1a;解压下载的安装包 1&#xff09;、对下载的插件包进行解压 2&#xff09;、解压好后打开其文件夹 第三步&#xff1a;更改解压文件里的.crx文件为.rar(压缩…

ubuntu20.04中安装划词翻译_Chrome翻译插件【沙拉查词】amp;【彩云小译】

定位: 【彩云小译】—— 网页翻译(网页版还有文档翻译、视频翻译功能) 【沙拉查词】—— 聚合划词翻译、PDF文档划词翻译 【彩云小译】主打的是网页翻译,相比其他的网页翻译插件,其优势在于,网页是同时显示英文和中文的,这样对于某些翻译不通顺的地方,也可以自己快速对…

chrome浏览器安装右键翻译插件

平常打开网页查看相关文章的时候&#xff0c;遇到一些不会的英文单词&#xff0c;可能第一反应是复制英文单词到百度翻译里面&#xff0c;下面为介绍一种直接右键选中英文单词&#xff0c;实现在线翻译的插件。 这边用到的是“划词翻译”插件&#xff0c;安装步骤如下&#xff…

chrome浏览器无法安装crx插件的解决方法(以翻译插件为例)

目录 一、资源获取 二、具体步骤 一、资源获取 chrome翻译插件放我网盘里了。 链接&#xff1a;https://pan.baidu.com/s/17tc29MieYkO5QgClmWyTXAhttps://pan.baidu.com/s/17tc29MieYkO5QgClmWyTXA 提取码&#xff1a;wubd 二、具体步骤 ①将网盘里的文件解压缩&#xf…

谷歌安装翻译插件

推荐一款免费又好用的谷歌翻译插件 如何安装并使用&#xff0c;操作如下 首先下载该插件的安装包 链接&#xff1a;https://pan.baidu.com/s/1T0Eh3PlDbePvPMY3NHxIig?pwd3kjg 提取码&#xff1a;3kjg下载完成之后&#xff0c;解压即可&#xff08;注意&#xff1a;记住解压路…

谷歌浏览器翻译插件安装步骤

3、打开chrome浏览器,点击右上角3个点 打开:更多工具 > 扩展程序 #4、打开开发者模式 #5、加载DeepL扩展插件 选择解压deepl文件夹的路径 安装完毕

Google关停中国区域翻译服务后继续使用Chrome自带翻译插件的方法教程

问题 最近&#xff0c;大概从22年9月末开始&#xff0c;去查阅外语资料时发现熟悉的网站却没有给我自动翻译成中文。 以前也有过这样的问题&#xff0c;刷新或者重启下就好了&#xff0c;但是这次折腾了半天也没好。第二天看到新闻&#xff0c;尼玛Google直接关停了中国区的翻…

Chrome 翻译插件规避代码块

阅读英文官方文档的时候&#xff0c;浏览器自带的翻译插件&#xff0c;经常是无差别翻译&#xff0c;阅读页代码块非常不友好。尝试通过网上的方法解决这个问题。 Tampermonkey 首先需要安装 Tampermonkey 扩展程序 官方下载 编辑框输入下面的脚本 // UserScript // name …

Google翻译Chrome插件

Google翻译Chrome插件 Google翻译的概述google翻译插件的使用方法1.google翻译插件的下载2.google翻译插件的安装3.google翻译插件的设置方法和使用说明 google翻译插件注意事项 Google翻译的概述 Google翻译是一款由谷歌公司提供的网页划词 翻译插件&#xff0c;是Google Chr…

chrome添加网页单词翻译插件

打开网页&#xff1a; https://chrome.google.com/webstore/category/extensions 搜索插件&#xff1a; TransOver 安装选择 translate into chinese simple 鼠标选词翻译效果&#xff1a;