17

我正在使用TextInputLayout设计支持库 22.2.1

我以编程方式设置了值EditText,当屏幕出现时,我可以看到TextInputLayout在移动到浮动位置之前,提示与里面的文本重叠。

这里有一个简单的布局:

    <android.support.design.widget.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/editText1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="hint1" />

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

在我的Activity

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        EditText e1 = (EditText) findViewById(R.id.editText1);
        e1.setText("TEXT TEST 1");
   }

有谁知道解决方法?

在此处输入图像描述

4

4 回答 4

18

目前,避免这种行为的唯一方法是以EditText编程方式添加。

  1. 创建一个TextInputLayout 没有EditText. 以编程方式或通过 XML 膨胀 - 没关系,但它必须是空的。
  2. 创建EditText并将其文本设置为您需要的任何内容。
  3. 添加EditTExtTextInputLayout.

这是一个例子:

TextInputLayout til = (TextInputLayout) findViewById(R.id.til);
til.setHint(R.string.hint);

EditText et = new EditText(getContext());
et.setText(value);

til.addView(et);

使用设计库 V23 于 21/08/2015 更新:

使用设计支持库 v23 ,您可以禁用动画

只需使用以下setHintAnimationEnabled方法

textInputLayout.setHintAnimationEnabled(boolean)

这是Google Tracker上的问题。

于 2015-07-24T14:04:19.543 回答
4

我最近在使用 DialogFragment 时遇到了这个问题。要解决此问题,只需在设置字段值之前在字段中有值时禁用提示动画即可。顺序很重要。

例如,

TextInputLayout layout = (TextInputLayout) findViewById(R.id.text_layout);
TextInputEditText edit = (TextInputEditText) findViewById(R.id.text_edit);

String fieldValue = "Something";

layout.setHintAnimationEnabled(fieldValue == null);
edit.setText(fieldValue);

这样布局不会在设置文本时启动动画。您还可以观察文本更改并在该字段为空时再次启用它。

于 2017-03-08T02:44:22.747 回答
2

您可以直接在 XML 中指定TextInputLayout

 app:hintAnimationEnabled="false"
于 2019-10-23T14:07:03.390 回答
0
TextInputLayout seller_email = (TextInputLayout) findViewById(R.id.existing_seller_email_ET);

seller_email.getEditText().setText("Any text");

希望对你有帮助

于 2020-12-06T08:36:28.330 回答