美文网首页
Android开发之自定义DataTimePicker(日期时间

Android开发之自定义DataTimePicker(日期时间

作者: 我挺平凡 | 来源:发表于2019-06-28 08:27 被阅读0次

    最近项目中,要求日期和时间在同一个页面同时选择,这个就需要自定义了,其实所谓的自定义只不过是把时间和日期对话框组合在一起而已。

    一、基本知识

    1、关于日期的几个控件:

    • DatePicker(日期选择控件)
    • TimePicker(时间选择控件)
    • DatePickerDialog(日期选择对话框)
    • TimePickerDialog(时间选择对话框)
    • AnalogClock(模拟时钟控件)
    • DigitalClock(数字时钟控件)
    2、相关控件介绍

    DatePicker 、 TimePicker 都继承自Android.widget.FrameLayout,并且默认展示风格、与操作风格也类似。DatePicker用于展示一个日期选择控件,TimePicker用于展示一个时间选择控件。

    DatePicker常用相关属性:

    • android:calendarViewShown:是否显示日历
    • android:spinnersShown:是否显示为滚动条样式(会同时显示日历和滚动条样式上边两个都不设置)
    • android:startYear:设置可选开始年份。
    • android:endYear:设置可选结束年份。
    • android:maxDate:设置可选最大日期,以mm/dd/yyyy格式设置。
    • android:minDate:设置可选最小日期,以mm/dd/yyyy格式设置。

    DatePicker的方法而言,除了常用获取属性的setter、getter方法之外,还需要特别注意一个初始化的方法init()方法,用于做DatePicker控件的初始化,并且设置日期被修改后,回调的响应事件。此方法的签名如下:
    init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)
    从上面的init()方法可以看到,DatePicker被修改时响应的事件是DatePicker.OnDateChangedListener 事件,如果要响应此事件,需要实现其中的onDateChanged()方法,其中参数从签名即可了解意思,这里不再累述。
    onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    作为一个时间选择控件来说,TimePicker需要与时间相关的getter、setter方法之外,还需要有时间被修改够,回调的响应事件。

    TimePicker常用方法有如下几个:

    • is24HourView():判断是否为24小时制。
    • setIs24HourView():设置是否为24小时制显示。
    • getCurrentXxx():获取当前时间。
    • setCurrentXxx():设置当前时间。
    • setOnTimeChangedListener():设置时间被修改的回调方法。

    TimePicker控件被修改的回调方法,通过setOnTimeChangedListener()方法设置,其传递一个 TimePicker.OnTimeChangedListener 接口,需要实现其中的onTimeChanged()方法。

    二、实现步骤

    首先,对话框的布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="vertical">
    
        <DatePicker
            android:id="@+id/data_picker"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:calendarViewShown="false" />
    
        <TimePicker
            android:id="@+id/timer_picker"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    </LinearLayout>
    

    然后,封装了一个工具类:

    public static void getDateTime(Context mContext, final TextView textView) {
            View date_time_picker = View.inflate(mContext, R.layout.date_time_picker, null);
            final DatePicker datePicker = (DatePicker) date_time_picker.findViewById(R.id.data_picker);
            final TimePicker timePicker = (TimePicker) date_time_picker.findViewById(R.id.timer_picker);
            timePicker.setIs24HourView(true);
    
            //  Build  DateTimeDialog
            AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
            builder.setView(date_time_picker);
            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
    
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String dateStr = datePicker.getYear() + "-" + datePicker.getMonth() + "-" + datePicker.getDayOfMonth();
                    int currentMinute = timePicker.getCurrentMinute();
                    String curMinute = "";
                    if (currentMinute < 10) {
                        curMinute = "0" + currentMinute;
                    } else {
                        curMinute = String.valueOf(currentMinute);
                    }
                    String timeStr = timePicker.getCurrentHour() + ":" + curMinute;
                    textView.setText(dateStr + "  " + timeStr);
                }
            });
            builder.show();
        }
    
    

    最后,直接调用就好了

    DateUtil.getDateTime(this, tv);
    

    相关文章

      网友评论

          本文标题:Android开发之自定义DataTimePicker(日期时间

          本文链接:https://www.haomeiwen.com/subject/otvjcctx.html