EditText错误图标和显示密码错位

问题描述 投票:9回答:3

我有一个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>

它正常工作,但是当出现错误时,错误图标显示两次,它位于显示密码图标的顶部。

error icon missplaced

我的验证码显示错误:

if (success) {
    finish();
    startMainActivity();
} else {
         mPasswordView.setError(getString(R.string.error_incorrect_password));
            mPasswordView.requestFocus();
}
android android-edittext
3个回答
30
投票

不要在setError上调用EditText,使用TextInputLayoutsetError()


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) {

            }
        });

-1
投票

在将gradle依赖项更新为24+之后,似乎是一个错误。请检查this的答案。在那之前我让所有的setError()工作正常。另外,您不必要求焦点以显示错误。

© www.soinside.com 2019 - 2024. All rights reserved.