MaterialTimePicker 需要用户点击三次

MaterialTimePicker requires user to click three times

我正在使用 Kotlin 开发本机 Android 应用程序,目前正在尝试使用 MaterialTimePicker 来填充 EditText 的时间。我有一个用户体验问题,用户需要单击三次才能显示键盘。

  1. 第一次点击显示MaterialTimePicker: First click displays the MaterialTimePicker
  2. 第二次点击聚焦 MaterialTimePicker: Second click focuses the MaterialTimePicker
  3. 第三次点击显示键盘: Third click displays the keyboard

这是处理 EditText 的 onClick 侦听器的代码:

binding.startTimeTextInputEditText.setOnClickListener {
        val (hours, minutes) = Functions.getTimeSplit(binding.startTimeTextInputEditText.text.toString())
        val picker = setupTimePicker(hours, minutes, R.string.title_start_time, false)
    }

下面是设置和显示 MaterialTimePicker 的代码:

private fun setupTimePicker(
    hours: Int,
    minutes: Int,
    titleTime: Int,
    force24Hours: Boolean
): MaterialTimePicker {
    val isSystem24Hour = is24HourFormat(this)
    val clockFormat = if (!force24Hours) {
        if (isSystem24Hour) TimeFormat.CLOCK_24H else TimeFormat.CLOCK_12H
    } else {
        TimeFormat.CLOCK_24H
    }

    val picker = MaterialTimePicker.Builder()
        .setTimeFormat(clockFormat)
        .setTitleText(titleTime)
        .setInputMode(INPUT_MODE_KEYBOARD)
        .setHour(hours)
        .setMinute(minutes)
        .build()
    picker.show(supportFragmentManager, picker.toString())

    return picker
}

我已经尝试过让 EditText 不可聚焦等操作:

android:focusableInTouchMode="false"

这里是 EditText 的 XML 代码:

<com.google.android.material.textfield.TextInputLayout
                        android:id="@+id/startTimeTextInputLayout"
                        style="@style/TextInput.Dark"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_marginEnd="4dp"
                        android:focusableInTouchMode="false"
                        android:layout_weight="1"
                        app:errorTextAppearance="@style/errorAppearance"
                        app:hintTextAppearance="@style/Hint.Dark">

                        <com.google.android.material.textfield.TextInputEditText
                            android:id="@+id/startTimeTextInputEditText"
                            style="@style/TextInputEditText.NotClickable.Dark"
                            android:layout_width="match_parent"
                            android:focusableInTouchMode="false"
                            android:layout_height="wrap_content"
                            android:background="@drawable/background_rounded_input_text"
                            android:hint="@string/hint_start_time"
                            android:inputType="text" />

                    </com.google.android.material.textfield.TextInputLayout>

我只想点击两次即可实现相同的流程:

  1. 供用户点击EditText,显示MaterialTimePicker。
  2. 再次单击 select 小时或分钟,然后开始在键盘上输入。

我自己 运行 进入了这个两次点击要求,它似乎是 material-components-android 库中的一个错误。此问题已在版本 1.5.0-alpha05.

中修复

因此,将库依赖项更新到版本 1.5.0-alpha05 或更高版本应该可以解决您的问题。

将您的 Material 组件版本至少升级到 1.6.0-alpha01。如果您单击“小时”或“分钟”字段,它将立即显示键盘