调用 TextInputLayout 的 setError() 时,不要将提示移动到顶部

Do not move hint to the top when calling setError() of TextInputLayout

我有一个带有 TextInputLayout 的布局文件:

<android.support.design.widget.TextInputLayout
    android:id="@+id/fullname"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:errorEnabled="true"
    app:errorTextAppearance="@style/Error">

    <EditText
        android:id="@+id/fullnameEditText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Full Name"
        android:inputType="textEmailAddress"
        android:padding="26dp"/>
</android.support.design.widget.TextInputLayout>

当我在 TextInputLayout 上调用 setError() 方法时,提示转到顶部,就好像 TextInputLayout 会获得焦点一样。

我想在设置错误时保持提示不变。它应该看起来像这样:

对如何构建此布局有任何想法吗?

您需要实现自己的 MyTextInputLayout class 扩展自 TextInputLayout

其中 class 您将必须控制何时显示或不显示提示,覆盖出现错误时显示提示的自定义行为。

来自 SO 的另一个答案的良好起点:

您可以通过其他方式完成,您可以在 OnCreate()

上调用 setError()
 mTextInputLayout = findViewById(R.id.fullname);
 mTextInputLayout.setError("Enter Your Full Name");

当您想显示错误时,请执行此操作

mTextInputLayout.setErrorEnabled(true);

这将通过提示解决您的问题

   if (mTextInputLayout.isErrorEnabled()){
         mTextInputLayout.setHintEnabled(false);
      }else {
         mTextInputLayout.setHintEnabled(true);
      }