14

私は基本的な DatePicker を使用しており、DatePickerDialog の Year フィールドを非表示にして、Month と Day のみが表示されるようにする方法を見つけようとしています。年の基になるコードがまだそこにあることは気にしません。ダイアログで年フィールドを非表示にしたいだけです。あなたは次のようなもので知っています:

((View) myYear).setVisibility(View.GONE);

myYear はビューではなく int であるため、機能しないことがわかっていますが、それらの線に沿ったものです。出来ますか?

4

5 に答える 5

22

DatePicker を実装するために私が見つけた非常に簡単な方法は、xml で呼び出すことです。

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

次に、Java で必要なフィールド (この場合は年) を非表示にします。

    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());
    }
于 2012-05-17T14:10:51.803 に答える
9

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

Android 5.0以降の解決策はまだわかりません。興味深いものを見つけたらすぐにお知らせします。

アイデアとして、Build.VERSION.SDK_INT を使用して Android のバージョンを確認してから、反射を使用して DatePickerSpinnerDelegate にアクセスし、必要なフィールドを設定することができます。

繰り返しますが、Google はこれを何度も自由に変更できるため、これは理想的な解決策ではありません...

于 2014-11-26T16:01:34.560 に答える
0

日付ピッカーで年フィールドを無効にする簡単な方法

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 に設定するだけです

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;

}

参考のために以下のリンクを参照 しました DatePickerDialog から年を削除します

于 2015-09-23T11:22:22.167 に答える