14

Я использую TextInputLayout с библиотекой поддержки дизайна 22.2.1.TextInputLayout анимация перекрывает текст, когда текст установлен программно

Я устанавливаю значение 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"); 
    } 

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

enter image description here

ответ

17

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

  1. Создать без EditTextTextInputLayout. Программно или через инфляцию 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 method:

textInputLayout.setHintAnimationEnabled(boolean) 

Здесь вопрос о Google Tracker.

+1

Очень полезно, спасибо. Знаете ли вы о методе, который поможет получить подсказку без использования match_parent в атрибутах width? Так что ширина поля будет соответствовать размеру подсказки, если пустой и не сфокусирован – milez

+0

спасибо за обновление – drod

+0

@Gabriele Mariotti делает textInputLayout.setHintAnimationEnabled (boolean) работает в v25 ?? – KJEjava48

3

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^