¿Puedo enlazar un mensaje de error a un TextInputLayout?

Me gustaría enlazar un mensaje de error directamente a un android.support.design.widget.TextInputLayout . No puedo encontrar una forma de establecer el error a través del diseño. ¿Es esto posible?

Así es como lo imaginaba trabajando:

 <?xml version="1.0" encoding="utf-8"?> <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools"> <data> <import type="android.view.View" /> <variable name="error" type="String" /> </data> <android.support.v7.widget.LinearLayoutCompat android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> <android.support.design.widget.TextInputLayout android:layout_width="match_parent" android:layout_height="wrap_content" app:errorEnabled="true" app:errorText="@{error}"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/username" android:inputType="textEmailAddress" /> </android.support.design.widget.TextInputLayout> </android.support.v7.widget.LinearLayoutCompat> </layout> 

No hay ningún atributo XML correspondiente al método setError() , por lo que no se puede establecer el mensaje de error directamente en XML (lo que es un poco extraño saber que errorEnabled está allí). Pero esto puede ser resuelto fácilmente mediante la creación de Binding Adapter que establecería que para usted. Algo como eso.

 @BindingAdapter("app:errorText") public static void setErrorMessage(TextInputLayout view, String errorMessage) { view.setError(errorMessage); } 

Consulte los documentos oficiales vinculantes , sección "Establecimientos de atributos", especialmente "Configuradores personalizados"

EDITAR

Posiblemente pregunta tonta, pero ¿dónde debo poner esto? ¿Necesito extender TextInputLayout y poner esto allí?

En realidad no es una pregunta tonta en absoluto, simplemente porque no se puede obtener una respuesta completa leyendo la documentación oficial. Por suerte, es bastante simple: no es necesario extender nada, simplemente ponga ese método en cualquier parte de sus proyectos. Puede crear una clase separada (es decir, BindingTools.java ) o simplemente agregar este método a cualquier clase existente en su proyecto. Mientras anote este método con @BindingAdapter , asegúrese de que sea public y static , no importa en qué clase viva.

  • Desplazarse a Cadena específica en el elemento de vista de lista personalizada
  • Android: las trampas de eliminar carpetas ldpi / mdpi
  • Comprender measureWithLargestChild: ¿Por qué rompe el diseño?
  • Sobreponiendo problema en Android TextView
  • Disposición linear linear del androide dos artículos al lado de uno a
  • ¿Cómo puedo configurar espacios de nombres personalizados en el archivo de diseño en Android Studio?
  • Android: dibujable con la esquina redonda perfecta
  • Uso del marco de arrastrar y soltar de Android en Mi aplicación de inicio personalizado
  • Fragmentos: ¿cuál es el mejor lugar para medir vistas?
  • ListView no procesa todos los elementos hasta que interactúa con
  • Contenido de la aplicación va detrás de la barra de navegación en android L
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.