style studio personalizar outlined fields error edittext android android-layout android-edittext android-support-library android-textinputlayout

android - studio - EditText agregado no es un TextInputEditText. Cambie a usar esa clase en su lugar



textinputlayout error (4)

Estoy usando un EditText dentro de un TextInputLayout , pero después de actualizar la biblioteca de soporte a 23.2.0, recibo esta advertencia en el logcat, ¿Cuál es la diferencia entre un EditText normal y un TextInputEditText ? Parece que no puedo encontrar ninguna documentación para ello.


No hay documentación para ello, pero la clase es un EditText normal con una sola característica adicional:

El uso de esta clase nos permite mostrar una pista en el IME cuando está en modo ''extraer''.

Específicamente establece el EditorInfo.hintText . Notará que en la clase TextInputLayout puede especificar la sugerencia y su apariencia en lugar de como parte del widget secundario EditText .

Si necesita hacer eso, debe usar un TextInputEditText para que preste atención a la información de pista que especificó en TextInputLayout .


Son esencialmente lo mismo, pero creo que TextInputEditText tiene más características y posiblemente atributos. Cambié a TextInputEditText y todo funcionó y se veía como antes con el EditText estándar.


También me preguntaba esto, Daniel Wilson reunió la documentación, pero a simple vista no significa mucho. Esto es de lo que se trata: el "modo de extracción" se refiere al tipo de vista que se muestra cuando el espacio es demasiado pequeño, por ejemplo, el paisaje en un teléfono. Estoy usando Galaxy S4 con Google Keyboard como IME.

IU horizontal sin IME visible

Según el enfoque (en la Descripción), puede ver TextInputLayout en acción empujando la pista fuera del editor. Nada especial aquí, esto es lo que se supone que debe hacer TextInputLayout .

IU horizontal editando el campo Nombre vacío

Editando el Nombre puede ver que el IME no le da una pista de lo que está editando.

Paisaje UI edición vacía Descripción campo

Al editar la Descripción, puede ver que el IME le da una pista de lo que está editando.

XML de diseño

La diferencia entre los dos campos es su tipo EditText VS TextInputEditText . Lo importante aquí es que TextInputLayout tiene el android:hint y no el EditText envuelto, este es el caso cuando las pocas líneas de código Java de TextInputEditText hacen una gran diferencia.

Campo de nombre

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

Campo de descripción

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


Tuve este problema y acabo de eliminar esta línea en mi archivo xml:

android: fitsSystemWindows = "true"

Y el error desapareció.