【问题标题】:MaterialTimePicker requires user to click three timesMaterialTimePicker 需要用户点击三次
【发布时间】:2021-09-14 00:52:27
【问题描述】:

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

  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. 再次单击以选择小时或分钟,然后开始在键盘上输入。

【问题讨论】:

    标签: android android-studio kotlin material-design


    【解决方案1】:

    我自己遇到了这两次点击要求,似乎这是 material-components-android 库中的一个错误。该问题已在版本1.5.0-alpha05 中修复。

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

    【讨论】:

    • 哇,我已经习惯了 Android Studio 告诉我什么时候更新我什至没有想到的导入。我现在已经更新并且它有效!太棒了,谢谢你:D
    【解决方案2】:

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

    【讨论】:

    • 刚刚做了,成功了!谢谢你:)
    猜你喜欢
    • 1970-01-01
    • 2015-07-02
    • 2012-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多