1. 程式人生 > >DatePicker日期選擇器隱藏Day選擇

DatePicker日期選擇器隱藏Day選擇

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(); } }