在安卓开发中!都是经常会对时间的数据录入,为了方便录入时间并统一录入时间的格式!所以采用开源框架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;
}
}