我们从网上一搜DatePickerDialog相关实现,大多都是默认的形式,也就是不带取消按钮。下边上我的代码:我将代码简单的封装到一个工具类里边
public static DatePickerDialog showDateDialog(Context ctx, final EditText editText)//editText是我们要显示选择日期值 { Calendar c = Calendar.getInstance();//获取当前日期 int year = c.get(Calendar.YEAR); int month = c.get(Calendar.MONTH); int day = c.get(Calendar.DAY_OF_MONTH); final DatePickerDialog datePickerDialog = new DatePickerDialog(ctx,null,year,month,day); datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "完成", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DatePicker datePicker = datePickerDialog.getDatePicker(); int year = datePicker.getYear(); int month = datePicker.getMonth(); int day = datePicker.getDayOfMonth(); StringBuilder monthBuilder = new StringBuilder(); if (month + 1 < 10) { monthBuilder.append("0"); } monthBuilder.append(month + 1); StringBuilder dayBuilder = new StringBuilder(); if (day < 10) { dayBuilder.append("0"); } dayBuilder.append(day); editText.setText(year + "-" + monthBuilder.toString() + "-" + dayBuilder.toString());//点击完成将处理好的日期值写到edittext上 } }); datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { datePickerDialog.cancel(); } }); datePickerDialog.getDatePicker().setCalendarViewShown(false); return datePickerDialog; }
我们通过setButton在dialog中加入取消按钮,并作简单的实现。
在我们选择完日期后,当我们再次打开toucher的时候,应该在日期控件中显示为选择后的时间:看代码
public static DatePickerDialog showDateDialog(Context ctx, final EditText editText) { int year = 0; int month = 0; int day = 0;
//首次打开 if(editText.getText().toString().length()==0) { Calendar c = Calendar.getInstance(); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); }else{//有值的情况下 String currDate = editText.getText().toString(); year = Integer.valueOf(currDate.split("-")[0].toString()); month = Integer.valueOf(currDate.split("-")[1].toString())-1; day = Integer.valueOf(currDate.split("-")[2].toString()); } final DatePickerDialog datePickerDialog = new DatePickerDialog(ctx,null,year,month,day); datePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "完成", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { DatePicker datePicker = datePickerDialog.getDatePicker(); int year = datePicker.getYear(); int month = datePicker.getMonth(); int day = datePicker.getDayOfMonth(); StringBuilder monthBuilder = new StringBuilder(); if (month + 1 < 10) { monthBuilder.append("0"); } monthBuilder.append(month + 1); StringBuilder dayBuilder = new StringBuilder(); if (day < 10) { dayBuilder.append("0"); } dayBuilder.append(day); editText.setText(year + "-" + monthBuilder.toString() + "-" + dayBuilder.toString()); } }); datePickerDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { datePickerDialog.cancel(); } }); datePickerDialog.getDatePicker().setCalendarViewShown(false); return datePickerDialog; }
调用方式示例:
conditionEdit.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if(dialog!=null && dialog.isShowing()){ return true; } if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) { conditionEdit.clearFocus(); conditionEdit.requestFocus(); } if (motionEvent.getAction() == MotionEvent.ACTION_UP) { dialog = Dialog.showDateDialog(ReservationActivity.this, conditionEdit); dialog.show(); } return false; } });