DatePicker日期选择器隐藏Day,7.0Pad出错
项目中用到DatePicker日期选择器,但是由于其他原因只想使用年和月选择,于是就隐藏了日选择器
((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE);
这种方法根据获取子View的方式去隐藏Day选择器,但是在三星的pad系统为7.0上就出现Null指针现象,由于没有相关设备,所以只能猜测view的层次结构发生变化。所以只能用其他方法去实现了如下
/**
* 隐藏“天”
* @param mDatePicker
*/
private void hideDay(DatePicker mDatePicker) {
try {
/* 处理android5.0以上的特殊情况 */
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//根据FindView方式去获取DayView
int daySpinnerId = Resources.getSystem().getIdentifier("day", "id", "android");
if (daySpinnerId != 0) {
View daySpinner = mDatePicker.findViewById(daySpinnerId);
if (daySpinner != null) {
daySpinner.setVisibility(View.GONE);
}
}
} else {
//根据反射的方法去获取DayView字段
Field[] datePickerfFields = mDatePicker.getClass().getDeclaredFields();
for (Field datePickerField : datePickerfFields) {
if ("mDaySpinner".equals(datePickerField.getName()) || ("mDayPicker").equals(datePickerField.getName())) {
datePickerField.setAccessible(true);
Object dayPicker = new Object();
try {
dayPicker = datePickerField.get(mDatePicker);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
((View) dayPicker).setVisibility(View.GONE);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}