【发布时间】:2021-09-14 00:52:27
【问题描述】:
我正在使用 Kotlin 开发原生 Android 应用程序,目前正在尝试使用 MaterialTimePicker 来填充 EditText 的时间。我有一个 UX 问题,用户需要单击三次才能显示键盘。
- 第一次单击显示 MaterialTimePicker: First click displays the MaterialTimePicker
- 第二次点击聚焦 MaterialTimePicker: Second click focuses the MaterialTimePicker
- 第三次单击显示键盘: 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>
我只想通过两次点击来实现相同的流程:
- 供用户点击EditText,MaterialTimePicker显示。
- 再次单击以选择小时或分钟,然后开始在键盘上输入。
【问题讨论】:
标签: android android-studio kotlin material-design