web-dev-qa-db-ja.com

マテリアル日付ピッカーカスタムスタイリング

このライブラリでGoogleマテリアルの範囲日付ピッカーを使用しました

実装 'com.google.Android.material:material:1.2.0-alpha02'

これは私のコードです

     MaterialDatePicker.Builder<Pair<Long, Long>> builder =
            MaterialDatePicker.Builder.dateRangePicker();

    CalendarConstraints.Builder constraintsBuilder = new CalendarConstraints.Builder();
    builder.setCalendarConstraints(constraintsBuilder.build());
    MaterialDatePicker<Pair<Long,Long>> picker = builder.build();
    assert getFragmentManager() != null;
    picker.show(getFragmentManager(), picker.toString());

ダイアログピッカーの変更テキストフィールドをカスタマイズしたり、ダイアログを全画面表示にしないなどを行いたい。

enter image description here

4
zakaria

フルスクリーンバージョンとダイアログバージョンの切り替えは、次のように簡単です。

フルスクリーン

val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar_Fullscreen).build()

ダイアログ

val picker = MaterialDatePicker.Builder.dateRangePicker().setTheme(R.style.ThemeOverlay_MaterialComponents_MaterialCalendar).build()
2
postfixNotation

投稿された回答は完全に機能しますが、materialCalendarThemeをグローバルに設定する必要はないようです。_MaterialDatePicker.Builder_およびsetTheme(int themeResId)メソッドを使用して設定できます。 Material Design Catalog App での例を次に示します。

_val datePicker = MaterialDatePicker.Builder.dateRangePicker().apply {
    context?.resolveOrNull(R.attr.materialCalendarTheme)?.let {
        setTheme(it)
    }
    setCalendarConstraints(getConstraints())
    }.build()
// ...
_

resolveOrThrowヘルパーメソッド:

_fun Context.resolveOrNull(@AttrRes attributeResId: Int): Int? {
    val typedValue = TypedValue()
    if (theme.resolveAttribute(attributeResId, typedValue, true)) {
        return typedValue.data
    }
    return null
}
_

このようにすると、DatePickerダイアログはフルスクリーンではなく、通常のダイアログになります。

1
reVerse