转载请注明出处:http://blog.csdn.net/wudiwo/article/details/8287200
以前项目中写的一个功能,大体根据年月查询部门人员当月考勤情况,如今项目早已交付使用。那时候领导都在用三星的i9003 Android2.2版本系统还算是主流吧,因此诞生了下面的实现:datepicker控件中内置了三个NumberPicker控件,找到显示日的控件,然后将其隐藏掉
DatePicker dp =this.findViewById(R.id.dp);
if (dp != null) {
((ViewGroup) dp.getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
}
但好景不长,不久领导们换了新手机,新手机配上了高版本系统,于是问题出现了。
在2.2系统中DatePicker控件保含了一个LinearLayout子view,而LinearLayout中包含三个NumberPicker控件分别用来显示年月日NumberPicker控件中又包含了三个子view。
在4.0系统中DatePicker中view层次结构与2.2不同,多了一层:
DatePicker包含了一个子view:LinearLayout.
LinearLayout中包含了两个子view:LinearLayout和CalendarView.
子LiearLayout中包含了三个NumberPicker控件
这就造成上面的那段代码在4.0中是达不到目的。
于是才有了下面的实现:
先上图大体效果是这样
上面的实现是有点类似于ios的时间控件效果。 最初的源码忘了来源何处了,这是在源码的基础是上过的效果。
代码量有点大就不一一贴出来了,要码的留下邮箱!
后来发现有说4.0版本版本下还可以这样实现:
((ViewGroup)((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE);
本没有亲自试过,有心人试过了望告之。
转载请注明出处:http://blog.csdn.net/wudiwo/article/details/8287200
下载地址:http://download.csdn.net/detail/wudiwo/4897008