DatePicker隐藏年/月/日

有时候项目中进行时间设置时,只需要设置年/或月/或日。这时候就需要对相应的部分进行隐藏。

1 DatePicker datePk = (DatePicker) findViewById(R.id.dp_date);
2 // 获取到年/月/日所在的组件群
3 ViewGroup targetGroup = (ViewGroup) ((ViewGroup) datePk.getChildAt(0)).getChildAt(0);
4 //接下来即可根据位置来隐藏年/月/日,如
5 targetGroup.getChildAt(0); //隐藏年

== === === = == === == = = = ===== = =
后来发现,上面这个方法还是算比较不好的,因为有些手机年月日第顺序刚好与上面的相反。这就会导致本来打算隐藏年,而结果“日”却不见了。
下面的稍微好些
 1 private void hideDay(DatePicker datePicker) {
 2         Field[] datePickerFields = datePicker.getClass().getDeclaredFields();
 3         for (Field field : datePickerFields) {
 4             // 其中mDaySpinner为DatePicker中为“日”定义的变量名
 5             if ("mDaySpinner".equals(field.getName())) {
 6                 field.setAccessible(true);
 7                 Object dayPicker = new Object();
 8                 try {
 9                     dayPicker = field.get(datePicker);
10                 } catch (IllegalAccessException e) {
11                     e.printStackTrace();
12                 } catch (IllegalArgumentException e) {
13                     e.printStackTrace();
14                 }
15                 ((View) dayPicker).setVisibility(View.GONE);
16             }
17         }
18     }

 另外要注意到是,在4.0以前,DatePicker中控件的名字是mDayPicker/mMonthPicker/mYearPicker。在4.0之后才改成了mDayspinner/mMonthSpinner/mYearSpinner.

原文地址:https://www.cnblogs.com/ivan-aldrich/p/4227439.html