由于需求需要自定义Dialog背景色,所有没有采用DatePickerDialog,自己写了个自定义的Dialog,问题随之而来,手工编辑的日期,点击确定却没法获取输入的值,查阅了一下源码,原来很简单就是个焦点的问题。
DatePicker中Edittext,是封装在NumberPicker中的,当焦点变化时,进行文本设置
OnFocusChangeListener focusListener = new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) { /* When focus is lost check that the text field * has valid values. */ if (!hasFocus) { validateInput(v); } } };
private void validateInput(View v) { String str = String.valueOf(((TextView) v).getText()); if ("".equals(str)) { // Restore to the old value as we don't allow empty values updateView(); } else { // Check the new value and ensure it's in range validateCurrentView(str); } }
用DatePickerDialog输入的为什么可以呢?
public void onClick(DialogInterface dialog, int which) { if (mCallBack != null) { //注意此处,当点击事件发生的时候,会clear焦点,触发文本校验 mDatePicker.clearFocus(); mCallBack.onDateSet(mDatePicker, mDatePicker.getYear(), mDatePicker.getMonth(), mDatePicker.getDayOfMonth()); } }
所以解决方法很简单,在onclick中加一句clearFocus()即可