web-dev-qa-db-ja.com

Androidの日付ピッカーを月と年のフィールドのみで表示する方法は?

Android sdk日付ピッカーで日選択オプションを無効にしたい。簡単なxml構成が最適です。

21
carbonr

カスタムの日付ピッカーを作成できる新しい日付ピッカーフレームワークをリリースしました。また、あなたが探しているような日付ピッカーの例もいくつか提供しました。うまくいきますように。

コードはここにあります: https://github.com/bendemboski/DateSlider

UPDATE 06/2014:このライブラリは2010年に開発され、2011年以降メンテナンスされていません。そのため、現在のところ古くなっている可能性があります。

16
Daniel

リフレクションを使用してDatePickerインスタンスをハッキングすることは可能です。このようにして、DatePickerで日を表すNumberPickerインスタンスにアクセスできます。

datePicker = (DatePicker) findViewById(R.id.expiration_date);
try {
    Field f[] = datePicker.getClass().getDeclaredFields();
    for (Field field : f) {
        if (field.getName().equals("mDayPicker")) {
            field.setAccessible(true);
            Object dayPicker = new Object();
            dayPicker = field.get(datePicker);
            ((View) dayPicker).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());
}
15
augustorsouza

リフレクションと言えば、これはAndroid 4.4.2 SDKで機能します

"mDaySpinner"

代わりに

"mDayPicker"
3
blyabtroi

最高の解決策だと思います

  datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "Android")).setVisibility(View.GONE);
2

編集:以下のコメントのように、私はこの回答をもうフォローしません。

デフォルトの日付ピッカーではそれができないと思います。基本的なAndroid UI要素から作成する必要があります。しかし、その問題に行く代わりに、この見栄えの良いiPhone風のホイールなど、より優れたライブラリ要素を使用してみませんか。- http://code.google.com/p/Android-wheel/ まだ使用していませんが、使用する予定です!

1
Nils

これは2.2バージョンで正常に動作します。ただし、ダイアログのタイトルは変更されません。

for (Field datePickerDialogField : datePickerDialogFields) {           

    if (datePickerDialogField.getName().equals("mDatePicker")) {
        datePickerDialogField.setAccessible(true);
        DatePicker datePicker = (DatePicker) datePickerDialogField.get(datePickerDialog);

        Field datePickerFields[] = datePickerDialogField.getType().getDeclaredFields();

        for (Field datePickerField : datePickerFields) {

            if ("mDayPicker".equals(datePickerField.getName())) {
                datePickerField.setAccessible(true);
                Object dayPicker = new Object();
                dayPicker = datePickerField.get(datePicker);
                ((View) dayPicker).setVisibility(View.GONE);
            }
        }
    }
}
0

隠れ日:

 datePicker.findViewById(Resources.getSystem().getIdentifier("day", "id", "Android")).setVisibility(View.GONE);

月を非表示にする場合:

datePicker.findViewById(Resources.getSystem().getIdentifier("month", "id", "Android")).setVisibility(View.GONE);
0

https://github.com/SimonVT/Android-datepicker ウィジェットを使用して、バックポートされた互換性を確保し、曜日ピッカーを「削除」できます。

<net.simonvt.numberpicker.NumberPicker
        Android:id="@+id/day"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:layout_marginLeft="16dip"
        Android:layout_marginRight="16dip"
        Android:focusable="true"
        Android:focusableInTouchMode="true"
        Android:visibility="gone"
        />
0
mspapant