Android简易日期选择



日期选择器,相信很多童鞋都见过。这里我不讲自定义日期选择器,只讲讲用系统原生的日期选择器。如上图所示,我这里教大家简单修改原生的。


下面看代码:

在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 


评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值