2016-05-10 14 views
-1

Ich versuche, nur Tag der Monats- und Monatsfelder in DatePicker in AlertDialog anzuzeigen. Auf früheren APIs von API 21 kann ich es mit Code unten tun. Aber wenn ich versuche, es in API21 zu tun, kehrt "getDeclaredFields()" nicht sogar wie "mYearPicker" oder "mYearSpinner" Felder zurück. Jeder hat irgendeine Idee wie Kann ich nur Tag und Monat Felder anzeigen? Und ich weiß nicht einmal, welches Feld "116" ist.Android API 21+ DatePicker kann Felder nicht ausblenden

Mein Code wie folgt aus: Before API 21

sieht wie folgt aus: API 21+

Jede Idee

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

aussehen sollte?

+0

Ähm, warum nicht gabeln 'DatePicker' und sie entsprechend anpassen ? Oder warum nicht [eine Drittanbieter-Bibliothek] (http://android-arsenal.com/tag/27) verwenden? Was lässt Sie vermuten, dass dieser Ansatz für Tausende von Android-Gerätemodellen geeignet ist, da Gerätehersteller die Android-Interna ändern können, ganz zu schweigen von Google mit neuen Android-Versionen? – CommonsWare

+0

scheint wie ein Duplikat von http://stackoverflow.com/questions/30789907/hide-day-month-or-year-from-datepicker-in-android-5-0-lollipop – Morse

+0

@Morse danke !! es hat gut funktioniert – Goktug

Antwort

-1

Dank @Morse ich die Lösung gefunden 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; 
} 

Also ich diese Methode nur nennen, wenn ich für ein neues Objekt Datepicker brauchen

Verwandte Themen