DatePickerDialog隐藏年月日

项目中的需求隐藏掉日~ 只保留年和月~

直接想起了之前农民伯伯有写过类似的~ 直奔了过去~
http://www.cnblogs.com/over140/archive/2011/09/20/2181532.html


照猫画虎弄了下 发下了些问题~

首先是那个findDialogPicker老是返回空,后来想,应该先show出来再去find吧~

一实验果然~所以在这里给各位提个醒.

伯伯用这句来隐藏控件

((ViewGroup) datePicker.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);


很明显这个不能通用,修改下日期显示格式,这里面的第一个不是固定的,有可能是年,有可能是月,也有可能是日,而且貌似4.0又多了一层

后来网上又找到了一个哥们用反射取得DatePicker里面的所要的NumberPicker
http://liujunhg.iteye.com/blog/1700357


通过反射得到指定的NumberPicker控件然后,想gone哪个就gone哪个~ 哈喇子流了一地

发现2.2的系统上可以,4.0上面filedNotFoundException

去源码里面溜达了一圈发现名字变了,2.2上 ‘日’的NumberPicker叫mDayPicker而4.0上叫mDaySpinner,所以4.0上才找不到这个field

好吧,苯方法 来个‘或’就完事了,google要是再改,我再或~

Class pickerClass = datePicker.getClass();
Field[] fields = pickerClass.getDeclaredFields();
for (Field field : fields) {
	String fieldName = field.getName();
	if ("mDayPicker".equals(fieldName) || "mDaySpinner".equals(fieldName)) {
		field.setAccessible(true);
		View dayView = (View) field.get(datePicker);
		dayView.setVisibility(View.GONE);
		break;
	}
}


好了大功告成~ 做了个优化的工具类~可以随便gone掉年月日~

MyDatePickerDialog mdpd = new MyDatePickerDialog(this, null, mYear, mMonth, mDay);
mdpd.hideWhich(true, false, false);
mdpd.show();


MyDatePickerDialog继承自DatePickerDialog,之前你怎么用,现在还怎么用

那三个boolean分别对应年月日是否隐藏~

好了上传测试工程~有好事记得想着点我~

猜你喜欢

转载自zigtang.iteye.com/blog/1752018