2016-05-10 3 views
-1

Я пытаюсь показать только поля месяца месяца и месяца в DatePicker в AlertDialog. В предыдущих API от API 21 я могу сделать это с кодом ниже. Но когда я пытаюсь сделать это в API21 +, «getDeclaredFields()» даже не возвращается, как поля «mYearPicker» или «mYearSpinner». Кто-нибудь знает, как могу ли я просто показать поля «День» и «Месяц»? И я даже не знаю, в каком поле «116».Android API 21+ DatePicker не может скрыть поля

Мой следующий код:

final DatePicker datePickerStart = new DatePicker(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar)); 
    datePickerStart .setCalendarViewShown(false); 
    datePickerStart .setSpinnersShown(true); 
    try { 
     Field f[] = datePickerStart .getClass().getDeclaredFields(); 
     for (Field field : f) { 
      if (field.getName().equals("mYearPicker")|| field.getName().equals("mYearSpinner")) { 
       field.setAccessible(true); 
       Object yearPicker = new Object(); 
       yearPicker = field.get(datePickerStart); 
       ((View) yearPicker).setVisibility(View.GONE); 
      } 
     } 
    } 
    catch (Exception e) { 
     Log.e("ERROR", e.getMessage()); 
    } 

Должно выглядеть так: Before API 21

выглядит так: API 21+

Любая идея?

+0

Um, почему не раскошелиться 'DatePicker' и изменить его в соответствии с ? Или, почему бы не использовать [стороннюю библиотеку] (http://android-arsenal.com/tag/27)? Что заставляет вас думать, что этот подход будет работать на тысячах моделей устройств Android, учитывая, что производители устройств могут изменять внутренние элементы Android, не говоря уже о Google с новыми версиями Android? – CommonsWare

+0

похоже на дубликат http://stackoverflow.com/questions/30789907/hide-day-month-or-year-from-datepicker-in-android-5-0-lollipop – Morse

+0

@Morse thanks !! он работал хорошо – Goktug

ответ

-1

Благодаря @Morse я нашел решение HERE

public DatePicker initMonthPicker(){ 
    DatePicker dp_mes = new DatePicker(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar)); 

    int year = dp_mes.getYear(); 
    int month = dp_mes.getMonth(); 
    int day  = dp_mes.getDayOfMonth(); 

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ 
     int daySpinnerId = Resources.getSystem().getIdentifier("day", "id", "android"); 
     if (daySpinnerId != 0) 
     { 
      View daySpinner = dp_mes.findViewById(daySpinnerId); 
      if (daySpinner != null) 
      { 
       daySpinner.setVisibility(View.VISIBLE); 
      } 
     } 

     int monthSpinnerId = Resources.getSystem().getIdentifier("month", "id", "android"); 
     if (monthSpinnerId != 0) 
     { 
      View monthSpinner = dp_mes.findViewById(monthSpinnerId); 
      if (monthSpinner != null) 
      { 
       monthSpinner.setVisibility(View.VISIBLE); 
      } 
     } 

     int yearSpinnerId = Resources.getSystem().getIdentifier("year", "id", "android"); 
     if (yearSpinnerId != 0) 
     { 
      View yearSpinner = dp_mes.findViewById(yearSpinnerId); 
      if (yearSpinner != null) 
      { 
       yearSpinner.setVisibility(View.GONE); 
      } 
     } 
    } else { //Older SDK versions 
     Field f[] = dp_mes.getClass().getDeclaredFields(); 
     for (Field field : f) 
     { 
      if(field.getName().equals("mDayPicker") || field.getName().equals("mDaySpinner")) 
      { 
       field.setAccessible(true); 
       Object dayPicker = null; 
       try { 
        dayPicker = field.get(dp_mes); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } 
       ((View) dayPicker).setVisibility(View.GONE); 
      } 

      if(field.getName().equals("mMonthPicker") || field.getName().equals("mMonthSpinner")) 
      { 
       field.setAccessible(true); 
       Object monthPicker = null; 
       try { 
        monthPicker = field.get(dp_mes); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } 
       ((View) monthPicker).setVisibility(View.VISIBLE); 
      } 

      if(field.getName().equals("mYearPicker") || field.getName().equals("mYearSpinner")) 
      { 
       field.setAccessible(true); 
       Object yearPicker = null; 
       try { 
        yearPicker = field.get(dp_mes); 
       } catch (IllegalAccessException e) { 
        e.printStackTrace(); 
       } 
       ((View) yearPicker).setVisibility(View.GONE); 
      } 
     } 
    } 
    return dp_mes; 
} 

Так я просто называю этот метод, когда мне нужно для нового объекта DatePicker

Смежные вопросы