【问题标题】:password toggle icon textinputlayout override error icon密码切换图标 textinputlayout 覆盖错误图标
【发布时间】:2020-05-19 07:14:27
【问题描述】:

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

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

【问题讨论】:

  • android:backgroundTint="@color/white" 删除此行
  • 目前还不清楚您要达到的目标
  • @GabrieleMariotti 你可以在这个链接中看到图片i.stack.imgur.com/Vc21z.jpg我希望你能理解我的问题。
  • @SaadKhan 使用 1.1.0 或更高版本。错误图标出现,密码切换图标消失。
  • @GabrieleMariotti 谢谢,你拯救了我的一天。

标签: android android-textinputlayout material-components-android material-components android-textinputedittext


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    最好的方法。 将 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")
     .....
    

    在条件匹配后不要忘记 setError(null)。

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

    【讨论】:

      【解决方案3】:

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

      像这样:

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

      【讨论】:

      • 这对我有用。谢谢!
      【解决方案4】:

      我遇到了同样的问题。我正在使用 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
           ...
           />
      

      【讨论】:

        猜你喜欢
        • 2019-04-16
        • 2013-07-13
        • 2017-07-26
        • 1970-01-01
        • 2014-03-07
        • 2023-03-21
        • 1970-01-01
        • 1970-01-01
        • 2016-10-24
        相关资源
        最近更新 更多