如何在Kotlin的android中设置时间选择器对话框的范围?

问题描述 投票:0回答:1

我具有如下的时间选择器对话框功能:

private fun showStartingTimeDialog() {
    val hr = 9
    val mn = 0

    val startingTimeListener = TimePickerDialog.OnTimeSetListener { _, _, _ -> /* no time setting */ }
    TimePickerDialog(this, startingTimeListener, hr, mn, false).show()
}

我想在8am到10am之间限制选择,这意味着用户只能在此范围之间滑动时钟,怎么做?

android kotlin android-timepicker
1个回答
0
投票
perdónno hablo ingles,peroaquítengo unasoluciónpara tu solicitud:

美洲驼绒球,夫人的礼物:

fun showDialogTimePicker() { var rangeTimePickerDialog = RangeTimePickerDialog( this, TimePickerDialog.OnTimeSetListener { timePicker, i, i2 -> }, true ) rangeTimePickerDialog.setMax(12, 1) rangeTimePickerDialog.setMin(8, 50) rangeTimePickerDialog.show() }

Esta es Clase RangeTimePickerDialog.kt

class RangeTimePickerDialog : TimePickerDialog { var calendar = Calendar.getInstance() var mCurrentHour = calendar.get(Calendar.HOUR) var mCurrentMinute = calendar.get(Calendar.MINUTE) constructor(context: Context, callBack: OnTimeSetListener, is24HourView: Boolean) : super( context, callBack, Calendar.getInstance().get(Calendar.HOUR), Calendar.getInstance().get(Calendar.MINUTE), is24HourView ) private var mMinHour = -1 private var mMinMinute = -1 private var mMaxHour = 100 private var mMaxMinute = 100 init { try { val superclass = javaClass.superclass val mTimePickerField = superclass!!.getDeclaredField("mTimePicker") mTimePickerField.isAccessible = true val mTimePicker = mTimePickerField.get(this) as TimePicker mTimePicker.setOnTimeChangedListener(this) } catch (e: NoSuchFieldException) { } catch (e: IllegalArgumentException) { } catch (e: IllegalAccessException) { } } fun setMin(hour: Int, minute: Int) { mMinHour = hour mMinMinute = minute } fun setMax(hour: Int, minute: Int) { mMaxHour = hour mMaxMinute = minute } override fun onTimeChanged(view: TimePicker, hourSelected: Int, minuteSelected: Int) { super.onTimeChanged(view, hourSelected, minuteSelected) if (hourSelected > mMaxHour) { mCurrentHour = mMaxHour mCurrentMinute = mMaxMinute } else if (hourSelected < mMinHour) { mCurrentHour = mMinHour mCurrentMinute = mMinMinute } else if (hourSelected == mMaxHour) { if (minuteSelected >= mMaxMinute) { mCurrentHour = hourSelected mCurrentMinute = mMaxMinute } else { mCurrentHour = hourSelected mCurrentMinute = minuteSelected } } else if (hourSelected == mMinHour) { if (minuteSelected <= mMinMinute) { mCurrentHour = hourSelected mCurrentMinute = mMinMinute } else { mCurrentHour = hourSelected mCurrentMinute = minuteSelected } } else { mCurrentHour = hourSelected mCurrentMinute = minuteSelected } updateTime(mCurrentHour, mCurrentMinute) } override fun onClick(dialog: DialogInterface?, which: Int) { if (which == DialogInterface.BUTTON_POSITIVE) { Log.e("rTimeP","$mCurrentHour:$mCurrentMinute") } if (which == DialogInterface.BUTTON_NEGATIVE) { Log.e("rTimeP", "not") } } }

Loglog猫咪之家]

2019-11-06 23:56:29.295 2472-2472/com.xxx.sagx E/rTimeP: 11:25

imagen donde se muestra el funcionamiento ademas de una validación de la hora seleccionada en un rango

Espero te Sirva,saludos

© www.soinside.com 2019 - 2024. All rights reserved.