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 ответа:
В настоящее время единственный способ избежать такого поведения-это добавить
EditText
программно.
- создать
TextInputLayout
без этогоEditText
. Программно или через XML-инфляцию-не имеет значения, но она должна быть пустой.- создайте
EditText
и установите его текст на все, что вам нужно.- добавьте
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);
Таким образом, макет не инициирует анимацию при установке текста. Вы также можете следить за изменениями текста и включить его снова, когда поле пусто.