首先,如果我的问题有什么更好的地方,请告诉我,这是我的第一个。
我正在为Android开发一个应用程序。
我希望我的用户能够在edittext
字段中快速输入时间。通常那里已经有一个时间了,应该选择一个时间,这样来自键盘的任何输入都会导致它被覆盖,而只需按一下“下一步”(或在键盘上输入)就会保持原样并跳到下一个字段
对于我所有的字段,这都很好用,但是由于某种原因,我无法掌握,无论我尝试什么,都不会选择该特定字段(及其双胞胎)中的文本。
我将android:selectAllOnFocus="true"
放在了res
文件中,当那不起作用时,我也将v.selectAll()
放在了其onFocusChangedListener
中。
flighttOutStringField?.onFocusChangeListener = View.OnFocusChangeListener { v, hasFocus ->
if (hasFocus) {
with(v as TextInputEditText) {
previousText = this.text.toString()
v.selectAll()
}
} else {
with(v as TextInputEditText) {
val currentText = this.text.toString()
if (!(("([01]\\d|2[0-3]):[0-5]\\d".toRegex().containsMatchIn(currentText) && currentText.length == 5)
|| ("([01]\\d|2[0-3])[0-5]\\d".toRegex().containsMatchIn(
currentText.padStart(
4,
'0'
)
) && currentText.length <= 4))
|| (currentText == "")
)
this.setText(previousText) // not a valid new entry, so no update on flight
else {
this.setText(
if (currentText.length < 5) "${currentText.padStart(
4,
'0')
.slice(0..1)}:${currentText.padStart(4, '0').slice(2..3)}" else currentText)
flight = flight.copy (tOutString = "${date?.format(DateTimeFormatter.ISO_DATE)}T${this.text}:00", changed = 1)
}
}
}
更新“飞行”变量将通过其设置器重新填充所有字段。
<android.support.design.widget.TextInputLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:id="@+id/flighttOutStringWrapper"
app:layout_constraintStart_toEndOf="@+id/flighttOutSelector" android:layout_marginTop="4dp"
app:layout_constraintTop_toBottomOf="@+id/flightOrigWrapper"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintEnd_toStartOf="@+id/flighttInStringWrapper">
<android.support.design.widget.TextInputEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="time"
android:ems="10"
android:id="@+id/flighttOutStringField"
android:textAlignment="center"
android:includeFontPadding="false"
android:hint="@string/timeOut"
android:nextFocusForward="@id/flighttInStringField" android:imeOptions="actionNext"
android:selectAllOnFocus="true"/>
</android.support.design.widget.TextInputLayout>
我认为选择TextInputEditText
后,所有文本都会被选中,但事实并非如此。
然后,我认为v.selectAll()
会为我做到这一点,但事实并非如此。
答案 0 :(得分:0)
尝试一下
v.setOnFocusChangeListener(null)
v.clearFocus();
v.requestFocus();
v.selectAll()
v.setOnFocusChangeListener(listener)