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

93

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

Silvia H
fuente
He actualizado mi biblioteca de soporte a 23.2.1 pero aún no se puede resolver TextInputEditText en mi código . ¿Cómo lo resolviste?
Edijae Crusar

Respuestas:

109

Yo también me preguntaba esto, Daniel Wilson reunió la documentación, pero para el ojo inexperto no significa mucho. De esto se trata: "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 el teclado de Google como editor de métodos de entrada (IME).

Interfaz de usuario horizontal sin IME visible

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

Interfaz de usuario horizontal sin IME visible

IU horizontal que edita el campo de nombre vacío

Al editar el nombre, puede ver que el IME no le da una pista de lo que está editando.

IU horizontal que edita el campo de nombre vacío

Campo de descripción vacío de edición de interfaz de usuario horizontal

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

Campo de descripción vacío de edición de interfaz de usuario horizontal

XML de diseño

La diferencia entre los dos campos es su tipo EditTextVS TextInputEditText. Lo importante aquí es que TextInputLayouttiene el android:hintEditText envuelto y no el envuelto, este es el caso cuando TextInputEditTextlas pocas líneas de código Java 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>
TWiStErRob
fuente
3
He actualizado mi biblioteca de soporte a 23.2.1 pero aún no se puede resolver TextInputEditText en mi código. ¿Cómo lo resolviste?
Edijae Crusar
¿Tiene la biblioteca de diseño también? Esto no es de apoyo.
TWiStErRob
1
Nota rápida: de acuerdo con los documentos, android:hintse supone que la propiedad debe ingresar en TextInputEditTextlugar de TextInputLayout.
DriesOeyen
1
@luxsypher terminé dejándolo caer y usando la otra forma, que es poner EditText en un TextInputLayout
Edijae Crusar
1
@ jeet.chanchawat es un upcast, así que es seguro. Siempre debe utilizar el tipo más general que le proporcione la funcionalidad (= API) necesaria. El uso TextInputEditTextes un detalle de implementación de la interfaz de usuario.
TWiStErRob
34

No hay documentación para ello, pero la clase es regular EditTextcon una característica adicional única:

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

Específicamente establece el EditorInfo.hintText. Notarás que en la TextInputLayoutclase puedes especificar la pista y su apariencia en lugar de como parte del EditTextwidget secundario .

Si necesita hacer eso, debe usar un TextInputEditTextpara que preste atención a la información de sugerencia que especificó en el TextInputLayout.

Daniel Wilson
fuente
2
algún ejemplo? No tengo idea de lo que está sugiriendo
behelit
4

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

Nick Mowen
fuente
Ya uso TextInputLayout, estoy preguntando sobre una alternativa a EditText llamada TextInputEditText
Silvia H
Lo siento, estaba hablando de TextInputEditText pero dije diseño. Edité la respuesta
Nick Mowen
0

La única diferencia es que cuando su dispositivo está en modo horizontal, TextInputEditTextmostrará la pista, EditTextno lo hará.

Sam Chen
fuente
-3

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

android: fitsSystemWindows = "true"

y el error desapareció.

Santos Rodríguez
fuente