Textinputlayout анимация перекрывает текст, когда текст задан программно


Я использую 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");
   }

Кто-нибудь знает обходной путь?

Введите описание изображения здесь

2 14

2 ответа:

В настоящее время единственный способ избежать такого поведения-это добавить EditText программно.

  1. создать TextInputLayout без этого EditText. Программно или через XML-инфляцию-не имеет значения, но она должна быть пустой.
  2. создайте EditText и установите его текст на все, что вам нужно.
  3. добавьте EditTExt к TextInputLayout.

Вот пример:

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

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

til.addView(et);

Обновлено 21.08.2015 с библиотекой дизайна V23:

С дизайном библиотека поддержки v23 Вы можете отключить анимацию :

Просто используйте setHintAnimationEnabled метод :

textInputLayout.setHintAnimationEnabled(boolean)

Вот вопрос на Google Tracker .

Недавно я столкнулся с этой проблемой при использовании 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);

Таким образом, макет не инициирует анимацию при установке текста. Вы также можете следить за изменениями текста и включить его снова, когда поле пусто.