我有一个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();
}
答案 0 :(得分:29)
请勿在{{1}}上致电setError
,使用EditText
的{{3}}
答案 1 :(得分:1)
即使您在TextInputLayout中设置了错误,材料版本1.1.0-alpha10的行为也相同。您可以通过将以下行添加到TextInputLayout来避免它:
app:errorIconDrawable =“ @ null”
答案 2 :(得分:1)
请在edittext中加入这两行
android:layout_marginEnd="9dp"
android:paddingRight="40dp"
答案 3 :(得分:0)
使用此代码,您可以在显示错误时删除切换。您可以在用户编写任何内容时显示切换。记不清了,您应该给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) {
}
});
答案 4 :(得分:0)
简单的解决方案
private static Drawable error;
error = getResources.getDrawable(R.drawable.nameOfIcon);
// use set bounds, here we use this to remove overlapping between error icon and password toggle.
error.setBounds(-50,0,0,error.getIntrinsicHeight());
// error icon will show 50dp from right
editTextName.setError("error string",error);
答案 5 :(得分:-1)
将gradle依赖项更新为24+后似乎是一个错误。
请检查this回答。在此之前,我的setError()
工作正常。另外,您不必要求焦点以显示错误。