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布局时间选择弹窗

<?xml version="1.0" encoding="utf-8"?>
<com.squareup.timessquare.CalendarPickerView
    android:id="@+id/calendar_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android" />
3.在主页面中布局文本控件用于绑定时间
<?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="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="日期:" />
        <EditText
            android:id="@+id/et_periodcarefultime"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:hint="" />
    </LinearLayout>
</LinearLayout>

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<Date> 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
                    }
                });
            }
        });

运行效果图:

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<Date> 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;
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值