DatePicker日期選擇器隐藏Day,7.0Pad出錯
項目中用到DatePicker日期選擇器,但是由于其他原因隻想使用年和月選擇,于是就隐藏了日選擇器
((ViewGroup) ((ViewGroup) dp.getChildAt()).getChildAt()).getChildAt().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 != ) {
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();
}
}