去除 TextInputLayout 中的浮动标签提示文本

Remove floating label hint text in TextInputLayout

有什么方法可以在用户单击文本字段时删除浮动标签(提示)?当我单击文本字段时,提示会自动移动到 editText 上方,但不会消失。我希望提示在用户单击文本字段并在其中输入一些文本时消失。

这里是 XML 代码:

 <com.google.android.material.textfield.TextInputLayout
                android:id="@+id/etPasswordLayout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:passwordToggleEnabled="true"
                app:hintTextAppearance="@style/MyHintStyle"
                android:textColorHint="@android:color/white"
                app:hintAnimationEnabled="false">

                <com.google.android.material.textfield.TextInputEditText
                    android:id="@+id/password_login"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_margin="10dp"
                    android:background="@drawable/edittext_background"
                    android:hint="@string/password"
                    android:inputType="textPassword"
                    android:padding="15dp"
                    android:textColor="@android:color/white"
                    android:textColorHint="@android:color/white" />
            </com.google.android.material.textfield.TextInputLayout>
app:hintEnabled="false"

只需将此添加到您的 TextInputLayout。尽管顾名思义,它只是删除了浮动标签提示,但完整保留了 EditText 提示。

或者,您可以通过在代码中对 TextInputLayout 调用 setHintEnabled(false) 来获得相同的结果。

专业提示:如果禁用提示,您可能会看到 EditText 在 TextInputLayout 中未正确对齐。这是一个已知的问题。解决此问题的方法是在 EditText 中简单地添加一个 8dp 的顶部填充。 (Reference)

可以参考the documentation for a better understanding

     <com.google.android.material.textfield.TextInputLayout
                    android:id="@+id/etPasswordLayout"
                    app:hintEnabled="false"
      
  android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:passwordToggleEnabled="true"
                    app:hintTextAppearance="@style/MyHintStyle"
                    android:textColorHint="@android:color/white"
                    app:hintAnimationEnabled="false">
    
                    <com.google.android.material.textfield.TextInputEditText
                        android:id="@+id/password_login"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_margin="10dp"
                        android:background="@drawable/edittext_background"
                        android:hint="@string/password"
                        android:inputType="textPassword"
                        android:padding="15dp"
                        android:textColor="@android:color/white"
                        android:textColorHint="@android:color/white" />
                </com.google.android.material.textfield.TextInputLayout>

app:hintEnabled="false"去除提示的浮动,不禁用提示。

删除 android:hint 并使用 app:placeholderText

   <com.google.android.material.textfield.TextInputLayout
        app:endIconMode="password_toggle"
        app:placeholderText="Password"
        ..>

注意: 至少需要版本 1.2.0-alpha03.

这个函数可以帮助你 (Kotlin)

fun hintRemover(textInputLayout: TextInputLayout, textInputEditText: TextInputEditText, text: String) {
    textInputEditText.setOnFocusChangeListener { _, hasFocus ->
        if (hasFocus) {
            textInputLayout.hint = null
        }
        else {
            textInputLayout.hint = text
        }
    }
}