11.实现一个android日期选择器
程序员文章站
2022-05-01 17:02:08
...
//第一步添加依赖
//日期选择器依赖 implementation 'com.contrarywind:Android-PickerView:3.2.7'
//------------直接上代码 简单
private void initView() {
mShengRi2 = (RelativeLayout) findViewById(R.id.mShengRi2);
mRiQi = (TextView) findViewById(R.id.mRiQi);
//点击事件里调用
mShengRi2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initTimePicker1();
pvTime.setDate(Calendar.getInstance());//注:根据需求来决定是否使用该方法(一般是精确到秒的情况),此项可以在弹出选择器的时候重新设置当前时间,避免在初始化之后由于时间已经设定,导致选中时间与当前时间不匹配的问题。
pvTime.show();
}
});
//系统原生日期选择器
// Calendar ca = Calendar.getInstance();
// mYear = ca.get(Calendar.YEAR);
// mMonth = ca.get(Calendar.MONTH);
// mDay = ca.get(Calendar.DAY_OF_MONTH);
// mShengRi2.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View v) {
// new DatePickerDialog(MainActivity.this, onDateSetListener, mYear, mMonth, mDay).show();
// }
// });
}
//系统原生日期选择器
// private DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() {
//
// @Override
// public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// mYear = year;
// mMonth = monthOfYear;
// mDay = dayOfMonth;
// String days;
// if (mMonth + 1 < 10) {
// if (mDay < 10) {
// days = new StringBuffer().append(mYear).append("年").append("0").
// append(mMonth + 1).append("月").append("0").append(mDay).append("日").toString();
// } else {
// days = new StringBuffer().append(mYear).append("年").append("0").
// append(mMonth + 1).append("月").append(mDay).append("日").toString();
// }
//
// } else {
// if (mDay < 10) {
// days = new StringBuffer().append(mYear).append("年").
// append(mMonth + 1).append("月").append("0").append(mDay).append("日").toString();
// } else {
// days = new StringBuffer().append(mYear).append("年").
// append(mMonth + 1).append("月").append(mDay).append("日").toString();
// }
//
// }
// mRiQi.setText(days);
// }
// };
private void initTimePicker1() {//选择出生年月日
//控制时间范围(如果不设置范围,则使用默认时间1900-2100年,此段代码可注释)
//因为系统Calendar的月份是从0-11的,所以如果是调用Calendar的set方法来设置时间,月份的范围也要是从0-11
Date curDate = new Date(System.currentTimeMillis());//获取当前时间
SimpleDateFormat formatter_year = new SimpleDateFormat("yyyy ");
String year_str = formatter_year.format(curDate);
int year_int = (int) Double.parseDouble(year_str);
SimpleDateFormat formatter_mouth = new SimpleDateFormat("MM ");
String mouth_str = formatter_mouth.format(curDate);
int mouth_int = (int) Double.parseDouble(mouth_str);
SimpleDateFormat formatter_day = new SimpleDateFormat("dd ");
String day_str = formatter_day.format(curDate);
int day_int = (int) Double.parseDouble(day_str);
Calendar selectedDate = Calendar.getInstance();//系统当前时间
Calendar startDate = Calendar.getInstance();
startDate.set(1900, 0, 1);
Calendar endDate = Calendar.getInstance();
endDate.set(year_int, mouth_int - 1, day_int);
//时间选择器
pvTime = new TimePickerView.Builder(this, new TimePickerView.OnTimeSelectListener() {
@Override
public void onTimeSelect(Date date, View v) {//选中事件回调
// 这里回调过来的v,就是show()方法里面所添加的 View 参数,如果show的时候没有添加参数,v则为null
/*btn_Time.setText(getTime(date));*/
mRiQi.setText(getTime(date));
}
})
.setType(new boolean[]{true, true, true, false, false, false}) //年月日时分秒 的显示与否,不设置则默认全部显示
.setLabel("年", "月", "日", "", "", "")//默认设置为年月日时分秒
.isCenterLabel(false)
.setDividerColor(Color.parseColor("#b3b3b3"))
.setTextColorCenter(Color.BLACK)//设置选中项的颜色
.setTextColorOut(Color.parseColor("#b3b3b3"))//设置没有被选中项的颜色
.setContentSize(21)
.setDate(selectedDate)
.setLineSpacingMultiplier(1.2f)
.setTextXOffset(-10, 0,10, 0, 0, 0)//设置X轴倾斜角度[ -90 , 90°]
.setRangDate(startDate, endDate)
// .setBackgroundId(0x00FFFFFF) //设置外部遮罩颜色
.setDecorView(null)
.build();
}
private String getTime(Date date) {//可根据需要自行截取数据显示
// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(date);
}