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

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

Ответ 1

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

Пейзажный интерфейс без видимого IME

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

Пейзажный интерфейс без видимого IME

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

Редактируя имя, вы можете видеть, что 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", и ошибка исчезла.