このライブラリで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());
ダイアログピッカーの変更テキストフィールドをカスタマイズしたり、ダイアログを全画面表示にしないなどを行いたい。
フルスクリーンバージョンとダイアログバージョンの切り替えは、次のように簡単です。
フルスクリーン:
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()
投稿された回答は完全に機能しますが、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ダイアログはフルスクリーンではなく、通常のダイアログになります。