EditText错误图标和显示密码错过了

时间:2016-09-04 02:24:38

标签: android android-edittext

我有一个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();
}

6 个答案:

答案 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()工作正常。另外,您不必要求焦点以显示错误。