我有一个EditText作为密码输入
<android.support.design.widget.TextInputLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="@string/prompt_password"
android:imeActionId="@+id/login"
android:imeActionLabel="@string/action_sign_in_short"
android:imeOptions="actionUnspecified"
android:inputType="textPassword"
android:maxLines="1"
android:singleLine="true" />
</android.support.design.widget.TextInputLayout>
它正常工作,但是当出现错误时,错误图标显示两次,它位于显示密码图标的顶部。
我的验证码显示错误:
if (success) {
finish();
startMainActivity();
} else {
mPasswordView.setError(getString(R.string.error_incorrect_password));
mPasswordView.requestFocus();
}
不要在setError
上调用EditText
,使用TextInputLayout
的setError()
使用此代码,您可以在显示错误时删除切换。你可以在用户写任何东西时显示切换。不记得了,你应该给文本输入布局id
public void showError(){
password.setError(errorMessage);
password.requestFocus();
textInputLayout.setPasswordVisibilityToggleEnabled(false);
}
password.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
textInputLayout.setPasswordVisibilityToggleEnabled(true);
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
}
});
在将gradle依赖项更新为24+之后,似乎是一个错误。请检查this的答案。在那之前我让所有的setError()
工作正常。另外,您不必要求焦点以显示错误。