6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

MaterialDatePickerで未来日を選択できないようにする

Last updated at Posted at 2021-02-09

やりたい事

MaterialDatePickerで日付を選択するとき、デフォルトでは過去/未来含めて全ての日付が選択できる。

ここで、「未来日は選択させたくない」という要件が出てきたとき、選択日に制限を加える必要がある。

解決方法

DateValidatorで制限を作成して、MaterialDatePickerのCalendarConstraintsにセットする。

        MaterialDatePicker.Builder.datePicker().apply {
            // 未来を選択させない制限
            val dateValidatorMax = DateValidatorPointBackward.before(Date().time)

            // 開始日を制限したいなら DateValidatorPointForward を使う
            // val dateValidatorMin = DateValidatorPointForward.from(指定日)

            // 制限Listを作成
            val validators: List<DateValidator> = listOf(dateValidatorMax)
            val dateValidator: DateValidator = CompositeDateValidator.allOf(validators)
            // CalendarConstraintsを作成
            val constraints: CalendarConstraints = CalendarConstraints.Builder()
                .setValidator(dateValidator) // 制限をセット
                .build()
            setCalendarConstraints(constraints)

        }.build().apply {
            // OKクリック
            addOnPositiveButtonClickListener { datetime ->
                val date: String = SimpleDateFormat("yyyy/MM/dd", Locale.JAPAN).format(datetime)
                Log.d(TAG,date)
            }
        }.show(childFragmentManager, "MaterialDatePicker")

修正後スクショ

○がついた日付より後はグレーになり、選択無効になっている。

環境

implementation 'com.google.android.material:material:1.3.0-rc01'

感想

公式にあまり情報がなくて、StackOverFlowに助けられた。
もっとMaterial Design Componentsを使ってほしいなら、公式ドキュメント&サンプルを充実させてほしい。

参考リンク

CalendarConstraints.Builder  |  Android Developers

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?