DatePicker日期選擇器隱藏Day選擇
阿新 • • 發佈:2019-02-06
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();
}
}