Seb*_*ien 0 android android-edittext android-textinputedittext
我的布局中有一堆 TextInputEditText,定义如下:
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.design.widget.TextInputEditText
android:id="@+id/confirmPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/registration_confirm_password"
android:inputType="textPassword" />
</android.support.design.widget.TextInputLayout>
Run Code Online (Sandbox Code Playgroud)
当用户尝试提交表单时,我有一个验证方法来检查每个字段并在无效字段上设置错误,如下所示:
if(confirmPassword.text.toString() != password.text.toString()) {
confirmPassword.error = "Passwords don't match"
confirmPassword.setOnKeyListener { _, _, _ ->
confirmPassword.error = null
true
}
valid = false
}
Run Code Online (Sandbox Code Playgroud)
一旦用户开始纠正他的错误,OnKeyListener 就会立即消除错误。
这段代码在我的模拟器和我的 Android 5.1.1 设备上完美运行。但是在我的一个用户的设备上,三星 Galaxy S6 Edge 和 Android 6.0,当他犯了一个错误并且一个字段上有错误时,他不能再编辑它了。
我使用 TextInputEditText 错了吗?这是一个已知的错误吗?有解决方法吗?
当硬件密钥被分派到视图时调用 onKey。这允许听众有机会在目标视图之前做出响应。
软件键盘中的按键通常不会触发此方法,尽管在某些情况下有些人可能会选择这样做。不要假设软件输入法必须是基于键的;即使是这样,它也可能以与您预期不同的方式使用按键,因此无法可靠地捕获软输入按键。
如果侦听器消耗了事件,则返回 True,否则返回 false。
当您true从onKey方法中返回时,setOnKeyListener您已经消耗了事件,并且false如果您希望视图以默认方式对按键做出反应,则事件不会发送到视图始终从它返回
但是对您来说更好的解决方案是使用您的代码更好地支持软键盘按键addTextChangedListener而不是setOnKeyListener这种方式:
if(confirmPassword.text.toString() != password.text.toString()) {
confirmPassword.error = "Passwords don't match"
confirmPassword.addTextChangedListener (new TextWatcher {
afterTextChanged(Editable s) {
// Nothing to do here
}
beforeTextChanged(CharSequence s, int start, int count, int after) {
// Nothing to do here
}
onTextChanged(CharSequence s, int start, int before, int count) {
// When user start to edit, delete the error feedback
confirmPassword.error = null
}
});
valid = false;
}
Run Code Online (Sandbox Code Playgroud)
当硬件按键事件被分派到这个视图时要调用的回调的接口定义。回调将在键事件提供给视图之前被调用。这仅对硬件键盘有用;软件输入法没有义务触发这个监听器。
| 归档时间: |
|
| 查看次数: |
691 次 |
| 最近记录: |