Анимация 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> 

In my 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)


В настоящее время единственный способ избежать такого поведения — добавить 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 августа 2015 г. С БИБЛИОТЕКОЙ ДИЗАЙНА V23:

Благодаря библиотеке поддержки дизайна v23 вы можете отключить анимацию:

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

textInputLayout.setHintAnimationEnabled(boolean)

Вот проблема с Google Трекер.

person Gabriele Mariotti    schedule 24.07.2015
comment
Очень полезно, спасибо. Знаете ли вы о методе, который заставит работать подсказку без использования match_parent в атрибутах ширины? Чтобы ширина поля соответствовала размеру подсказки, если она пуста и не сфокусирована - person milez; 25.07.2015
comment
@Gabriele Mariotti textInputLayout.setHintAnimationEnabled(boolean) работает в v25?? - person KJEjava48; 28.03.2017

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

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

person smallstepstoday    schedule 08.03.2017

Вы можете напрямую указать в XML для TextInputLayout :

 app:hintAnimationEnabled="false"
person Saurabh Padwekar    schedule 23.10.2019

TextInputLayout seller_email = (TextInputLayout) findViewById(R.id.existing_seller_email_ET);

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

Надеюсь, это поможет вам

person Mushtaq islam    schedule 06.12.2020
comment
Привет и добро пожаловать в Stack Overflow! Пройдите обзор и загляните в этот справочный центр. статья с информацией о том, как форматировать код. Спасибо за ответ, но можете ли вы также добавить объяснение того, как ваш код решает проблему? - person Jeanne Dark; 06.12.2020