Android时间选择器

在安卓开发中!都是经常会对时间的数据录入,为了方便录入时间并统一录入时间的格式!所以采用开源框架android-times-square日历控件来实现绑定时间数据录入!

TimeSquare概念:

TimesSquare实现选择日期日历控件:

可单选(SINGLE),多选(MULTIPLE),区间范围(RANGE)和对话框四种方式。

会在使用步骤3(初始化日期选择器控件)中通过inMode()改变其他三种形式的选择模式

使用步骤:

1.在build.gradle中添加日期选择控件依赖支持

implementation 'com.squareup:android-times-square:1.6.5@aar'

2.使用CalendarPickerView布局时间选择弹窗


3.在主页面中布局文本控件用于绑定时间


    
        
        
    

4.初始化日期选择器控件

/*初始化日期选择控件*/
        //加载CalendarPickerView布局
        dialogView = (CalendarPickerView) View.inflate(context, R.layout.dialog_calendar_picker, null);
        //初始化日期选择器
        Date dateStart = getOnlyDate(new Date());//开始时间
        Date dateEnd = getLastDayOfMonth(new Date());//当月的最后一天时间

        dialogView.init(dateStart, dateEnd)//可选择的日期范围
                .inMode(CalendarPickerView.SelectionMode.SINGLE)//读取设置为时间段单选, 也通过inMode()选择其他三种形式的选择模式
                .withSelectedDates(Arrays.asList(dateStart));//设置初始化选择的时间

        //初始化AlertDialog
        dialogCalendarPicker = new AlertDialog.Builder(context)
                .setTitle("请选择日期")
                .setView(dialogView)//设置dialog显示布局
                .setNeutralButton("返回", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();//关闭Dialog
                    }
                })
                .setPositiveButton("确定", null)
                .create();

5.在文本控件的事件内绑定日期选择器

/*获取主页面的时间绑定控件*/
        etPerioDcareFulTime = findViewById(R.id.et_periodcarefultime);

        //控件绑定
        etPerioDcareFulTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogCalendarPicker.show();//显示日期选择对话框
                //为了避免点击 positive 按钮后直接关闭 dialog,把点击事件拿出来设置
                //需要在.show();后设置
                dialogCalendarPicker.getButton(AlertDialog.BUTTON_POSITIVE)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        List listSelectData = dialogView.getSelectedDates();
                        //获取并记录当前选择的时间
                        Date selectDates = listSelectData.get(0);
                        //显示选择的日期
                        SimpleDateFormat dateFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
                        etPerioDcareFulTime.setText(dateFormatDate.format(selectDates));
                        dialogCalendarPicker.dismiss();//关闭dialog
                    }
                });
            }
        });

运行效果图:

Android时间选择器_第1张图片

MainActivity整体代码:

package com.gx.dialogcalendarpicker;

import androidx.appcompat.app.AppCompatActivity;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.squareup.timessquare.CalendarPickerView;

import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;

public class MainActivity extends AppCompatActivity {
    private Context context;
    private EditText etPerioDcareFulTime;
    private CalendarPickerView dialogView;
    private AlertDialog dialogCalendarPicker;
    //private Date selectDates;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = MainActivity.this;
        setContentView(R.layout.activity_main);

        /*获取主页面的时间绑定控件*/
        etPerioDcareFulTime = findViewById(R.id.et_periodcarefultime);

        /*初始化日期选择控件*/
        //加载CalendarPickerView布局
        dialogView = (CalendarPickerView) View.inflate(context, R.layout.dialog_calendar_picker, null);
        //初始化日期选择器
        Date dateStart = getOnlyDate(new Date());//开始时间
        Date dateEnd = getLastDayOfMonth(new Date());//当月的最后一天时间

        dialogView.init(dateStart, dateEnd)//可选择的日期范围
                .inMode(CalendarPickerView.SelectionMode.SINGLE)//读取设置为时间段单选, 也通过inMode()选择其他三种形式的选择模式
                .withSelectedDates(Arrays.asList(dateStart));//设置初始化选择的时间

        //初始化AlertDialog
        dialogCalendarPicker = new AlertDialog.Builder(context)
                .setTitle("请选择日期")
                .setView(dialogView)//设置dialog显示布局
                .setNeutralButton("返回", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();//关闭Dialog
                    }
                })
                .setPositiveButton("确定", null)
                .create();

        /*获取主页面的时间绑定控件*/
        etPerioDcareFulTime = findViewById(R.id.et_periodcarefultime);

        //控件绑定
        etPerioDcareFulTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialogCalendarPicker.show();//显示日期选择对话框
                //为了避免点击 positive 按钮后直接关闭 dialog,把点击事件拿出来设置
                //需要在.show();后设置
                dialogCalendarPicker.getButton(AlertDialog.BUTTON_POSITIVE)
                .setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        List listSelectData = dialogView.getSelectedDates();
                        //获取并记录当前选择的时间
                        Date selectDates = listSelectData.get(0);
                        //显示选择的日期
                        SimpleDateFormat dateFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
                        etPerioDcareFulTime.setText(dateFormatDate.format(selectDates));
                        dialogCalendarPicker.dismiss();//关闭dialog
                    }
                });
            }
        });
    }

    /**
     *  得到当天日期
     */
    public Date getOnlyDate(Date date) {
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(date);
        calendar.set(Calendar.HOUR_OF_DAY, 0);
        calendar.set(Calendar.MINUTE, 0);
        calendar.set(Calendar.SECOND, 0);
        calendar.set(Calendar.MILLISECOND, 0);
        return calendar.getTime();
    }

    /**
     * 得到当前月的最后一天
     */
    public Date getLastDayOfMonth(Date sDate1) {
        Calendar cDay1 = Calendar.getInstance();
        cDay1.setTime(sDate1);
        final int lastDay = cDay1.getActualMaximum(Calendar.DAY_OF_MONTH);
        Date lastDate = cDay1.getTime();
        lastDate.setDate(lastDay);
        return lastDate;
    }
}

 

你可能感兴趣的:(Android时间选择器)