2016-05-10 5 views
-1

AlertDialogのDatePickerに月と日のフィールドのみを表示しようとしています。以前のAPIのAPI 21から、私はAPI21 + "getDeclaredFields()"でも "mYearPicker"や "mYearSpinner" fields.Doesのような返すことはありませんそれをやろうとすると、下のコードでそれを行うことができます誰もどのように考えている私はちょうど日と月のフィールドを表示することはできますか?そして、私はフィールド "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

オムために必要がある場合ので、私はちょうど、このメソッドを呼び出して、なぜ 'フォークDatePicker'と合わせて、それを修正しない解決策を見つけた@Morseします?または、[サードパーティのライブラリ](http://android-arsenal.com/tag/27)を使用しないでください。デバイスメーカーが新しいAndroidバージョンでGoogleにとどまらず、Androidの内部構造を変更できることを考えると、このアプローチは何千もの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

おかげで、私は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; 
} 

iは新しい日付ピッカーオブジェクト

関連する問題