CoordinatorLayout estropea la posición emergente setError
Estoy frente a un problema con EditText
setError
posición emergente.
- Inflación de XML de diseño a LinearLayout personalizado crea vista LinearLayout redundante
- Excepción al eliminar una vista de un LinearLayout en Android
- fije el ancho y la altura como porcentaje en el diseño relativo
- Error: Android-XML: Colocar un <WebView> en un elemento padre que utiliza un tamaño wrap_content puede llevar a errores sutiles; Utilizar match_parent
- Android: Agregar vista dinámicamente en un diseño anidado
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.
Soy nuevo en la programación de Android y no estoy seguro de lo que está pasando, por favor, ayúdame.
- Android: Cómo establecer el tamaño de un diseño de forma programática
- Programe el ancho del botón de forma programada en 50% de los padres LinearLayout
- ¿Cómo alinear el cursor EditText correctamente?
- Divisor para LinearLayout vertical?
- ListView ocupa todo el espacio en LinearLayout
- ¿Cómo puedo crear un borde alrededor de un Android LinearLayout?
- compruebe si existe una vista desde un inflador de diseño antes de añadir otro
- Cómo hacer que el TextView arrastre en LinearLayout suave, en android?
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.
- BaseGameActivity.runOnUpdateThread () vs. Entity.registerUpdateHandler ()
- ¿Por qué consigo este error cuando en el mapa de google "Error al cargar DynamiteLoader: java.lang.ClassNotFoundException: ¿No encontró la clase?