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");
}
Кто-нибудь знает обходное решение?
![enter image description here]()
Ответы
Ответ 1
В настоящее время единственный способ избежать этого поведения - добавить программный код 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.
Ответ 2
Недавно я столкнулся с этой проблемой при использовании 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);
Таким образом, макет не запускает анимацию при установке текста. Вы также можете следить за изменениями текста и снова включать его, когда поле пусто.