日期选择器,相信很多童鞋都见过。这里我不讲自定义日期选择器,只讲讲用系统原生的日期选择器。如上图所示,我这里教大家简单修改原生的。
下面看代码:
在4.x上我禁止了日期的选择,只能选择年月,同理年也可以禁掉。但是这个方法仅能在4.x上使用,因为2.x没有这个方法,而5.0日期选择器做了修改,会报nullpoint错误。
/**
* 重写日期选择器 1.只显示 年-月 2.title 固定显示
*
* @author hjhrq1991
*/
class PickerDialog extends DatePickerDialog {
@SuppressLint("NewApi")
public PickerDialog(Context context, OnDateSetListener callBack,
int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth);
this.setTitle("请选择日期");
// getChildAt(2)为日期的选择控件,设置为GONE就会隐藏掉。但是此行代码只有再4.x有效,如果你使用5.0的样式就不能加这行代码,
// 因为5.0的DatePickerDialog调整了没有这个child会报错,至于2.x因为还没提供该方法,所以也不能使用。
((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0))
.getChildAt(0)).getChildAt(2).setVisibility(View.GONE);
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
this.setTitle("请选择日期");
mDateEd.setText(year + "年" + (month + 1) + "月");
}
}
但是日期选择器在该部分是一个edittext,所以在弹出选择器时输入法也会跟着弹出来,这样效果很不好。那要怎么做才行呢?
在初始化日期选择器时,我们取得它的对象,并使用setSoftInputMode()方法设置输入法隐藏。
/**
* 显示日期选择器并在文本上显示,禁止选择器弹出时弹出输入法
*/
private void showPicker() {
final Calendar localCalendar = Calendar.getInstance();
PickerDialog pickerDialog = new PickerDialog(this,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
localCalendar.set(1, year);
localCalendar.set(2, monthOfYear);
mDateEd.setText(year + "年" + (monthOfYear + 1) + "月");
}
}, localCalendar.get(1), localCalendar.get(2),
localCalendar.get(5));
pickerDialog.show();
// 这句的出现是为了禁止选择器弹出时弹出输入法,因为再4.x上选择器是一个edittext,默认会弹出输入法供用户输入
pickerDialog.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
}
本次讲解到这里:demo下载地址
欢迎大家加我,相互学习!
如有转载,请注明出处:http://blog.csdn.net/hjhrq1991