значок переключения пароля textinputlayout переопределить значок ошибки

Я использую переключатель пароля, чтобы показать и скрыть пароль. И я не хочу использовать пользовательский рисунок. Но когда этот текст редактирования генерирует ошибку, он переопределяет значок переключения пароля и не может добавить отступы или поля к этому значку. Если есть какое-то решение этого, будет приятно. Это код, который я использую:

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

comment
android:backgroundTint=@color/white удалить эту строку   -  person Nice umang    schedule 03.02.2020
comment
Не очень понятно, чего вы пытаетесь добиться   -  person Gabriele Mariotti    schedule 03.02.2020
comment
@GabrieleMariotti, вы можете увидеть изображение по этой ссылке i.stack.imgur.com/Vc21z.jpg Надеюсь, вы поймете мой вопрос.   -  person Saad Khan    schedule 03.02.2020
comment
@SaadKhan Используйте версию 1.1.0 или более позднюю. Появится значок ошибки, а значок переключения пароля исчезнет.   -  person Gabriele Mariotti    schedule 03.02.2020
comment
@GabrieleMariotti использует 1.1.0-beta01. но не в состоянии решить это.   -  person Saad Khan    schedule 03.02.2020
comment
Используйте com.google.android.material.textfield.TextInputEditText вместо EditText   -  person Gabriele Mariotti    schedule 03.02.2020
comment
@GabrieleMariotti, спасибо, вы спасли мой день.   -  person Saad Khan    schedule 03.02.2020
comment
@GabrieleMarriotti с использованием com.google.android.material:material:1.4.0 ничего не изменилось. Значок ошибки по-прежнему перекрывается переключением пароля.   -  person Bitwise DEVS    schedule 18.07.2021
comment
@BitwiseDEVS попробуйте это. stackoverflow.com/a/60095321/10097307   -  person Saad Khan    schedule 21.07.2021


Ответы (4)


Используйте 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:endIconMode и app:endIconTint.

person Gabriele Mariotti    schedule 03.02.2020

У меня такая же проблема. Я использую 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
     ...
     />
person Ozzini    schedule 21.07.2021

Лучший способ сделать это. Назначьте 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>

В классе:

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

Не забудьте установить Error(null) после совпадения с вашим условием.

https://stackoverflow.com/a/60095321/10097307

person Saad Khan    schedule 29.09.2020

Вы должны установить для errorIconDrawable значение null, когда вы устанавливаете текстовую ошибку на что-то, чтобы она не переопределяла значок переключения пароля.

Как это:

if (hasError) {
    textInputLayout.error = "Error text"
    textInputLayout.errorIconDrawable = null
}
person Pedro Sequeira    schedule 11.01.2021