CoordinatorLayout estropea la posición emergente setError

Estoy frente a un problema con EditText setError posición emergente.

Editar error de texto

Estoy usando el siguiente código para crear el diseño:

Activity_profile.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout 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" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context=".ProfileActivity" android:orientation="vertical"> <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/profile" /> </android.support.design.widget.CoordinatorLayout> 

Profile.xml

 <RelativeLayout 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" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" tools:context=".ProfileActivity" tools:showIn="@layout/activity_profile"> <EditText android:id="@+id/etProfileName" android:layout_width="match_parent" android:layout_height="50dp" android:capitalize="words" android:hint="@string/et_hint_profile_name" android:textAlignment="center" /> </RelativeLayout> 

Lo que he intentado

Si cambio el android.support.design.widget.CoordinatorLayout con LinearLayout el problema setError no va a suceder, pero eso cambiará el color de la barra de estado a blanco y mi interfaz de usuario se ve raro.

Corregido, problema de la barra de estado

Soy nuevo en la programación de Android y no estoy seguro de lo que está pasando, por favor, ayúdame.

Lo que funcionó para mí es un LinearLayout extra en activity_main.xml (sí, allí):

 <android.support.design.widget.CoordinatorLayout 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" android:id="@+id/activityRoot" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:context="com.example.biptest.MainActivity"> <!-- *** THIS ONE *** --> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/appbar" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <include layout="@layout/content_main" /> <!-- FRAGMENT(S) INSIDE --> </LinearLayout> <!-- *** BUT LEAVE THE FAB ALONE *** --> <android.support.design.widget.FloatingActionButton android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_margin="@dimen/fab_margin" android:src="@android:drawable/ic_dialog_email" android:visibility="gone" /> </android.support.design.widget.CoordinatorLayout> 

Esto también funciona alrededor del error de diseño que se muestra cuando cambia la visibilidad de una vista en un fragmento.

Y el siguiente problema es los mensajes de error blanco sobre blanco en la ventana emergente de Android 2.x ( enlace )

Yo tuve el mismo problema. Probando un poco la interfaz de usuario, encontré que el problema apareció cuando el widget EditText obtiene el enfoque programático para mostrar el error, en mi caso llamando a .requestFocus() , pero cuando se centra en el widget de nuevo manualmente el popup apareció correctamente.

Así que mi solución fue retrasar la llamada a .requestFocus() en un Runnable (simulando un usuario haciendo clic en el widget EditText).

Aquí está el código:

  if (mFocusView != null) mFocusView.clearFocus(); // clear current focus. Needed to simulate a new "manual" focus getActivity().runOnUiThread(new Runnable() { @Override public void run() { final Handler handler = new Handler(); final boolean b = handler.postDelayed(new Runnable() { @Override public void run() { mFocusView.requestFocus(); // request focus } }, 1); // only delay 1 milisecond } }); 

mFocusView es la vista EditText actual para mostrar un error.

Dependiendo de su caso de uso puede que tenga que manejar el enfoque cuando el teclado se descarta, ya que hace que el popup aparezca en la posición equivocada de nuevo.

No sé si esto resolverá su problema. Espero que ayude mientras Google resuelve este problema.

Este fue un error de Android y ahora está arreglado.

Referencia: https://code.google.com/p/android/issues/detail?id=193793

En realidad, el problema no es el CoordinatorLayout , sino AppBarLayout.ScrollingViewBehavior . Como simple solución, puedes eliminar la app:layout_behavior="@string/appbar_scrolling_view_behavior" línea app:layout_behavior="@string/appbar_scrolling_view_behavior" y añadir android:layout_marginBottom="?attr/actionBarSize" a tu vista anidada si no necesitas desplazamiento anidado.

  • Poner espacio entre los botones de Android
  • Desplazamiento de una Galería con botones
  • ¿Cómo puedo añadir un TextView a un LinearLayout dinámicamente en Android?
  • Cómo obtener un anuncio para mostrarlo en la parte inferior de la pantalla sin superposición
  • Tener un problema al eliminar TextViews de un LinearLayout mediante programación
  • Creación de LinearLayout en Java - Los elementos no se muestran
  • Android Linear / Disposición relativa - cómo "tamaño automático" objeto en el centro (3 objetos)
  • Android: Cómo medir la altura total de ListView
  • Ver animaciones en Android Colapsar / Expandir vistas en LinearLayout
  • ¿Cómo puedo mostrar elipses en mi TextView si es mayor que la línea 1?
  • Pasar el enfoque de padres a hijos en Linear Layout
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.