LoginSignup
0
1

More than 3 years have passed since last update.

TimePickerDialogで未来時刻が選択出来ないようにする

Last updated at Posted at 2020-10-10

TimePickerDialogで未来時刻が選択出来ないようにしようと思った。

しかし...

実装方法を探しに探したが、全く見つからぬ٩( ᐛ )و

そして私は MaterialDateTimePicker というライブラリに出会った。

実装してみる

  • build.gradleのdependenciesに以下を追加
implementation 'com.wdullaer:materialdatetimepicker:4.2.3'
  • MaterialDateTimePickerを表示してみる(ボタンをクリックしたらダイアログが表示されるようにしています)
class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        findViewById<Button>(R.id.show_timepicker_button).setOnClickListener {
            clickButton()
        }
    }

    private fun clickButton() {

        // TimePickerDialogのOKをクリックした時に呼ばれる。
        // キャンセルや画面をクリックしてDialogを終了した時には呼ばれない
        val callback = TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute, second ->
          // 選択した時間を取得して、何らかの処理を行う
        }

        val cal = Calendar.getInstance()

        TimePickerDialog.newInstance(
            callback,
            cal.get(Calendar.HOUR_OF_DAY),
            cal.get(Calendar.MINUTE),
            false
        ).show(supportFragmentManager, TAG)
    }

    companion object {
        private const val TAG = "MainActivity"
    }
}

表示された( ´∀`)

未来時刻が選択出来ないようにする

val cal = Calendar.getInstance()
val hour = cal.get(Calendar.HOUR_OF_DAY)
val minute = cal.get(Calendar.MINUTE)

TimePickerDialog.newInstance(callback, hour, minute, false).apply {
  // 現在の時刻を上限に設定する
  val timepoint = Timepoint(hour, minute)
  setMaxTime(timepoint)
}.show(supportFragmentManager, TAG)

未来時刻が選択出来ないようになりました

その他の設定

  • MaterialDateTimePickerのデザインを変更
TimePickerDialog.newInstance(callback, hour, minute, false).apply {
  // TimePickerDialogのカラーを設定
  accentColor = ContextCompat.getColor(this@MainActivity, R.color.colorAccent)
  // OKボタンの文言を設定
  setOkText("よしっ!")
  // OKボタンのカラーを設定
  setOkColor(ContextCompat.getColor(this@MainActivity, R.color.colorAccent))
  // キャンセルボタンの文言を設定
  setCancelText("あかん")
  // キャンセルボタンのカラーを設定
  setCancelColor(ContextCompat.getColor(this@MainActivity, android.R.color.darker_gray))
}.show(supportFragmentManager, TAG)
  • TimePickerDialog.newInstanceのis24HourModeをtrueにすると24時間表示になる

0
1
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
0
1