Search code examples
androidandroid-layoutandroid-edittextandroid-support-libraryandroid-textinputlayout

EditText added is not a TextInputEditText. Please switch to using that class instead


I'm using an EditText inside a TextInputLayout, but after upgrading the support library to 23.2.0, I get this warning in the logcat, What's the difference between a regular EditText and a TextInputEditText? I can't seem to find any documentation for it.


Solution

  • I was wondering this too, Daniel Wilson gathered the documentation, but to the untrained eye it doesn't mean much. Here's what it's all about: "extract mode" is referring to the type of view that's shown when the space is too small, for example landscape on a phone. I'm using Galaxy S4 with Google Keyboard as input method editor (IME).

    Landscape UI without visible IME

    Based on the focus (on Description) you can see TextInputLayout in action pushing the hint outside the editor. Nothing special here, this is what TextInputLayout is supposed to do.

    Landscape UI without visible IME

    Landscape UI editing empty Name field

    Editing the Name you can see that the IME doesn't give you a hint of what you're editing.

    Landscape UI editing empty Name field

    Landscape UI editing empty Description field

    Editing the Description you can see that the IME gives you a hint of what you're editing.

    Landscape UI editing empty Description field

    Layout XMLs

    The difference between the two fields is their type EditText VS TextInputEditText. The important thing here is that TextInputLayout has the android:hint and not the wrapped EditText, this is the case when TextInputEditText's few lines of Java code makes a big difference.

    Name field

    <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>
    

    Description field

    <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>