Я использую EditText
внутри TextInputLayout
, но после обновления библиотеки поддержки до 23.2.0 я получаю это предупреждение в logcat. Какая разница между регулярными EditText
и TextInputEditText
? Кажется, я не могу найти документацию.
Добавленный EditText не является TextInputEditText. Вместо этого переключитесь на использование этого класса
Ответ 1
Мне тоже было интересно, Daniel Wilson собрал документацию, но для неподготовленного глаза это мало значит. Вот что это значит: "режим извлечения" относится к типу вида, который отображается, когда пространство слишком мало, например, пейзаж на Телефон. Я использую Galaxy S4 с Google Keyboard как IME.
Пейзажный интерфейс без видимого IME
На основе фокуса (в описании) вы можете увидеть TextInputLayout
в действии, нажимая подсказку вне редактора. Здесь ничего особенного, это то, что должен делать TextInputLayout
.
Редактирование ландшафтного пользовательского интерфейса пустым Поле имени
Редактируя имя, вы можете видеть, что IME не дает вам намека на то, что вы редактируете.
Редактирование ландшафтного пользовательского интерфейса пустым Поле описания
Редактируя описание, вы можете видеть, что IME дает вам намек на то, что вы редактируете.
Макеты компоновки
Разница между двумя полями - их тип EditText
VS TextInputEditText
. Важно то, что TextInputLayout
имеет android:hint
, а не wrapped EditText, это тот случай, когда TextInputEditText
несколько строк кода Java имеют большое значение.
Поле имени
<android.support.design.widget.TextInputLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Item Name"
>
<EditText
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</android.support.design.widget.TextInputLayout>
Поле описания
<android.support.design.widget.TextInputLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="Item Description"
>
<android.support.design.widget.TextInputEditText
android:id="@+id/description"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine"
android:minLines="4"
android:scrollbars="vertical"
/>
</android.support.design.widget.TextInputLayout>
Ответ 2
Для этого нет документации, но класс является регулярным EditText
с одной дополнительной функцией:
Использование этого класса позволяет отображать подсказку в IME в режиме "extract".
В частности, он устанавливает EditorInfo.hintText
. Вы заметите, что в классе TextInputLayout
вы можете указать подсказку и ее внешний вид, а не как часть дочернего виджета EditText
.
Если вам нужно это сделать, вы должны использовать TextInputEditText
, поэтому он обращает внимание на информацию подсказки, указанную в TextInputLayout
.
Ответ 3
Они, по сути, одно и то же, но я думаю, что TextInputEditText
имеет больше возможностей и, возможно, атрибутов. Я изменился на TextInputEditText
, и все сработало и выглядело так, как раньше, со стандартным EditText
.
Ответ 4
Этот вопрос старый, однако у меня была эта проблема и просто удалить эту строку в моем XML файле: android: fitsSystemWindows = "true", и ошибка исчезла.