2012-05-01 1 views
13

私は基本的なDatePickerを使用していますが、MonthPickerDialogでYearフィールドを非表示にして月と日のみが表示されるようにする方法を解明しようとしています。私は今年の基になるコードがまだそこに残っていることに気をつけません。ダイアログのYearフィールドを隠すだけです。Android DatePickerのYearフィールドを非表示にしますか?

私はmyYearがintではないビューが、これらの線に沿って何かであるため、動作しません知っている
((View) myYear).setVisibility(View.GONE); 

:あなたのような何かを知っています。出来ますか? Javaで(年間このケースでは)

<DatePicker 
    android:id="@+id/thePicker" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 

し、その後、非表示したい方、フィールド:私は日付ピッカーを実装することが分かっ

+0

は、このリンクを参照して、この機能を使用することにより、年間の範囲を設定することができます。 それはあなたを助けるでしょう... – MAC

答えて

22

A超簡単な方法は、XMLでそれを呼び出すことです

picker = (DatePicker) findViewById(R.id.thePicker); 
    try { 
     Field f[] = picker.getClass().getDeclaredFields(); 
     for (Field field : f) { 
      if (field.getName().equals("mYearPicker")) { 
       field.setAccessible(true); 
       Object yearPicker = new Object(); 
       yearPicker = field.get(picker); 
       ((View) yearPicker).setVisibility(View.GONE); 
      } 
     } 
    } 
    catch (SecurityException e) { 
     Log.d("ERROR", e.getMessage()); 
    } 
    catch (IllegalArgumentException e) { 
     Log.d("ERROR", e.getMessage()); 
    } 
    catch (IllegalAccessException e) { 
     Log.d("ERROR", e.getMessage()); 
    } 
+12

'(field.getName()。equals(" mYearPicker ")){' と 'if(field.getName()。最新のアンドロイドのための –

+2

、また "mCalendarView" – YKS

8

このソリューションには本当に注意してください。フィールドにアクセスして可視性を変更するためにリフレクションを使用しています。これはAndroid 5.0では動作しません! GoogleはTimePickerとDatePickerの実装を変更し、クラスはデリゲートからappartの項目を公開しなくなりました。

まだAndroid 5.0 +の解決策がわかりません。私はすぐに面白いものを見つけました。

アイデアとして、Build.VERSION.SDK_INTを使用してAndroidのバージョンを確認し、次にReflexionを使用してDatePickerSpinnerDelegateにアクセスして、必要なフィールドを設定することができます。 Googleは何度も何度もこれを変更するのは自由ですよう

ここでも、これは削除したい場合は

+0

を隠すために、アンドロイドのための解決策は何ですか?(例えば、 "mYearSpinner")){field.getName()。equals( "mYearSpinner")){' ハニカムとそれ以降のバージョンのAndroidのDatePickerウィジェットを扱います。 5.0+? – RDD

+0

私は決して良い解決策を見いだせませんでした。私たちのプロジェクトでは、提供されたDatePickerを年選択とともに使用しました。このhttps://android-arsenal.com/tag/27もご覧ください。カスタマイズ可能なDatePickerライブラリを探している場合に便利です。 – rontho

+1

私は[this](http://stackoverflow.com/questions/21321789/android-datepicker-change-to-only-month-and-year)に従ってカスタムコンポーネントを作成しました。 – RDD

1

簡単な方法は、日付ピッカー

DatePicker dp = findDatePicker((ViewGroup) dialog.getWindow().getDecorView()); 

if(dp != null) 
{ 
    ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setEnabled(false); 
    ((ViewGroup) ((ViewGroup) dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setAlpha(0.4f); 
} 

に年フィールドを無効にするには...理想的なソリューションではありませんView.GONEに結果ビューの年フィールドだけsetvisibility私は、参照 するためのリンクの下に参照されている

dp.getChildAt(0)).getChildAt(0)).getChildAt(2).setVisibility(View.GONE) 



private DatePicker findDatePicker(ViewGroup group) { 
    if (group != null) { 
     for (int i = 0, j = group.getChildCount(); i < j; i++) { 
      View child = group.getChildAt(i); 
      if (child instanceof DatePicker) { 
       return (DatePicker) child; 
      } else if (child instanceof ViewGroup) { 
       DatePicker result = findDatePicker((ViewGroup) child); 
       if (result != null) 
        return result; 
      } 
     } 
    } 
    return null; 

} 

以下のように210

+0

Android 7でクラッシュする - nullオブジェクト参照で仮想メソッド 'void android.view.View.ViewVisibility(int)'を呼び出そうとしています –

1

あなたはhttp://code.google.com/p/android-wheel/

datePicker.setYearRange(1950,2017); 
関連する問題