我已经按照教程将 Android TimePicker 增加到 15 以外的间隔。
Android - TimePicker minutes to 15
我实际上已经将我的 timePicker 正确设置为以 5 为间隔递增。但是,当我不滚动 TimePicker 时,显示的前一分钟和后续分钟不是以 5 为增量。它们是单位数增量。有没有办法在 Android TimePicker 中编辑前一分钟和后一分钟?
这是 TimePicker 的图像。当您滚动浏览分钟时,中间数字以 5 为增量跳转,正如我希望的那样,但中间数字上方和下方的分钟(currentMinute)不是以 5 为增量,我希望它们也是。
最佳答案
此解决方案也适用于监听器以及以编程方式设置时间。
import android.content.Context
import android.util.AttributeSet
import android.widget.NumberPicker
import android.widget.TimePicker
import androidx.databinding.BindingAdapter
import java.lang.reflect.Field
import java.util.*
class TimePickerInterval @JvmOverloads constructor(
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : TimePicker(context, attrs, defStyleAttr) {
private var MINUTE_INTERVAL = 1
override fun getCurrentMinute(): Int {
return super.getCurrentMinute() * MINUTE_INTERVAL
}
override fun getMinute(): Int {
return super.getMinute() * MINUTE_INTERVAL
}
override fun onAttachedToWindow() {
super.onAttachedToWindow()
setUp()
}
private fun setUp() {
try {
val classForid = Class.forName("com.android.internal.R\$id")
val field: Field = classForid.getField("minute")
val mMinuteSpinner = findViewById<NumberPicker>(field.getInt(null))
mMinuteSpinner.minValue = 0
mMinuteSpinner.maxValue = 60 / MINUTE_INTERVAL - 1
val displayedValues: MutableList<String> = ArrayList()
var i = 0
while (i < 60) {
displayedValues.add(String.format("%02d", i))
i += MINUTE_INTERVAL
}
mMinuteSpinner.displayedValues = displayedValues.toTypedArray()
} catch (e: Exception) {
e.printStackTrace()
}
}
override fun setOnTimeChangedListener(onTimeChangedListener: OnTimeChangedListener) {
super.setOnTimeChangedListener { tp, hour, minute ->
onTimeChangedListener.onTimeChanged(tp, hour, minute * MINUTE_INTERVAL)
}
}
override fun setMinute(minute: Int) {
super.setMinute(minute/MINUTE_INTERVAL)
}
companion object {
@JvmStatic
@BindingAdapter("time_picker_set_minute_interval")
fun setInterval(view: TimePickerInterval, interval: Int?) {
interval?.let {
view.MINUTE_INTERVAL = interval
view.setUp()
}
}
}
}
在您的 XML 中:
<com.gixon.shared.widgets.TimePickerInterval
android:id="@+id/tp_to"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:timePickerMode="spinner"
time_picker_set_minute_interval="@{5}"
/>
关于android - 当我递增的间隔为 5 时,在 Android TimePicker 中编辑前一分钟和后一分钟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15737403/