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


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

4 76

4 ответа:

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

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

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

Landscape UI without visible IME

пейзаж пользовательского интерфейса для редактирования пустое поле Имя

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

Landscape UI editing empty Name field

пейзаж пользовательского интерфейса для редактирования пустое поле Описание

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

Landscape UI editing empty Description field

Макет XMLs

разница между двумя полями - это их тип EditText VS TextInputEditText. Главное здесь то, что TextInputLayout имеет android:hint и не завернутый 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>

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

использование этого класса позволяет нам отображать подсказку в IME, когда в режиме' extract'.

конкретно он устанавливает EditorInfo.hintText. Вы заметите в TextInputLayout

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

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

android: fitsSystemWindows = "true"

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