有时候项目中进行时间设置时,只需要设置年/或月/或日。这时候就需要对相应的部分进行隐藏。
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.