Добавленный EditText не является TextInputEditText. Пожалуйста, переключитесь на использование этого класса вместо этого

94

Я использую EditTextвнутри a TextInputLayout, но после обновления библиотеки поддержки до 23.2.0 я получаю это предупреждение в logcat: какая разница между обычным EditTextи a TextInputEditText? Кажется, я не могу найти для него никакой документации.

Сильвия Х
источник
Я обновил свою библиотеку поддержки до 23.2.1, но все же TextInputEditText не может быть разрешен в моем коде . как вы это решили?
Edijae Crusar

Ответы:

110

Мне тоже было интересно, Дэниел Уилсон собрал документацию, но для неподготовленного глаза это мало что значит. Вот что это такое: «режим извлечения» относится к типу вида, который отображается, когда пространство слишком мало, например альбомная ориентация на телефоне. Я использую Galaxy S4 с Google Keyboard в качестве редактора метода ввода (IME).

Альбомный интерфейс без видимого IME

Основываясь на фокусе (на описании), вы можете увидеть, как TextInputLayoutв действии выводится подсказка за пределы редактора. Здесь ничего особенного, это то, что TextInputLayoutнадо делать.

Альбомный интерфейс без видимого IME

Редактирование ландшафтного интерфейса пустого поля имени

Редактируя Имя, вы можете видеть, что IME не дает вам намеков на то, что вы редактируете.

Редактирование ландшафтного интерфейса пустого поля имени

Редактирование ландшафтного интерфейса пустое поле Описание

Редактируя описание, вы видите, что IME дает вам представление о том, что вы редактируете.

Редактирование ландшафтного интерфейса пустое поле Описание

Макет XML

Разница между этими двумя областями их типа EditTextVS TextInputEditText. Важным здесь является то, что TextInputLayoutесть , android:hintа не обернутый EditText, это тот случай , когда TextInputEditText«s несколько строк кода 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>
TWiStErRob
источник
3
Я обновил свою библиотеку поддержки до 23.2.1, но все же TextInputEditText не может быть разрешен в моем коде. как вы это решили?
Edijae Crusar
У вас тоже есть дизайнерская библиотека? Это не в поддержку.
TWiStErRob
1
Небольшое примечание: согласно документации, android:hintсвойство должно входить TextInputEditTextвместо TextInputLayout.
DriesOeyen
1
@luxsypher, я закончил тем, что бросил его и использовал другой способ, который помещает EditText в TextInputLayout
Эдиджа Крусар
1
@ jeet.chanchawat, так что это безопасно. Вы всегда должны использовать самый общий тип, который предоставляет вам необходимую функциональность (= API). Использование TextInputEditText- это деталь реализации пользовательского интерфейса.
TWiStErRob
35

Для него нет документации, но класс обычный EditTextс одной дополнительной функцией:

Использование этого класса позволяет отображать подсказку в IME в режиме «извлечения».

В частности, он устанавливает EditorInfo.hintText. Вы заметите, что в TextInputLayoutклассе вы можете указать подсказку и ее внешний вид, а не как часть дочернего элемента.EditText виджета.

Если вам нужно это сделать, вы должны использовать, TextInputEditTextчтобы он обращал внимание на подсказку, указанную вами в файле TextInputLayout.

Дэниел Уилсон
источник
2
любой пример?
Понятия
4

По сути, это одно и то же, но я думаю, что у TextInputEditTextнего больше функций и, возможно, атрибутов. Я перешел на, TextInputEditTextи все заработало и выглядело так же, как и раньше со стандартом EditText.

Ник Моуэн
источник
Я уже использую TextInputLayout, я спрашиваю об альтернативе EditText под названием TextInputEditText
Silvia H
Извините, я говорил о TextInputEditText, но сказал макет. Я отредактировал ответ
Nick Mowen 03
0

Единственная разница в том, что когда ваше устройство находится в альбомном режиме, TextInputEditTextподсказка будет отображаться, EditTextа не будет.

Сэм Чен
источник
-3

У меня была эта проблема, и я просто удалил эту строку в своем XML-файле:

android: fitsSystemWindows = "true"

и ошибка исчезла.

Сантос Родригес
источник