密码切换图标文本输入布局覆盖错误图标

password toggle icon textinputlayout override error icon

我正在使用密码切换来显示和隐藏密码。而且我不想使用自定义可绘制对象。但是,当此编辑文本生成错误时,它会覆盖切换密码图标并且无法向该图标添加填充或边距。如果对此有任何解决方案,那将是一种乐趣。 这是我使用的代码:

       <com.google.android.material.textfield.TextInputLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:textColorHint="@color/white"
                app:passwordToggleEnabled="true"
                app:passwordToggleTint="@color/white">

                <EditText
                    android:id="@+id/et_password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:backgroundTint="@color/white"
                    android:hint="@string/password"
                    android:imeOptions="actionDone"
                    android:inputType="textPassword"
                    android:maxLength="40"
                    android:maxLines="1"
                    android:textColor="@color/white"
                    android:textColorHint="@color/app_green_color" />

            </com.google.android.material.textfield.TextInputLayout>

使用 TextInputEditText 而不是 EditText

  <com.google.android.material.textfield.TextInputLayout
       app:endIconMode="password_toggle"
       app:endIconTint="@color/white"
       ...>

         <com.google.android.material.textfield.TextInputEditText
           android:inputType="textPassword"
           ../>

  </com.google.android.material.textfield.TextInputLayout>

另外(但与问题无关)属性 app:passwordToggleEnabled="true"app:passwordToggleTint="@color/white" 现在已弃用。使用 app:endIconModeapp:endIconTint.

最好的方法。 将 id 分配给 textinputlayout 并将 setError 分配给 textinputlayout,而不是 edittext。喜欢:

<android.support.design.widget.TextInputLayout
  android:id="@+id/tilSignUpPassword"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_marginTop="5dp"
  app:passwordToggleEnabled="true"
  app:hintEnabled="false">

  <EditText
    android:id="@+id/etSignUpPassword"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="Password"
    android:textColorHint="#a3a1a1"
    android:inputType="textPassword"
    android:drawableStart="@drawable/ic_password"
    android:background="@drawable/edittext_bg"
    android:layout_marginTop="3dp"
    android:drawablePadding="20dp"
    android:padding="10dp"
    android:layout_weight="0.09"/>

</android.support.design.widget.TextInputLayout>

在Class中:

 //your condition
 .....
 tilSignUpPassword.setError("Message")
 .....

不要忘记在条件匹配后设置错误(null)。

将文本错误设置为某些内容时,应将 errorIconDrawable 设置为 null,这样它就不会覆盖切换密码图标。

像这样:

if (hasError) {
    textInputLayout.error = "Error text"
    textInputLayout.errorIconDrawable = null
}

我遇到了同样的问题。我正在使用 TextInputLayout 和

implementation 'com.google.android.material:material:1.2.1'

上面的任何答案都没有帮助我。正确的做法是:

<com.google.android.material.textfield.TextInputLayout
 ...
 app:errorIconDrawable="@null">

    <com.google.android.material.textfield.TextInputEditText
     ...
     />