CardView Comportamiento de desplazamiento cuando el teclado está hacia arriba

El contenido principal de nuestra aplicación es un RecylerView de CardView. Para inscribirse necesitamos algo más que un nombre de usuario / contraseña para crear una cuenta, así que decidimos hacer que el flujo de registro provenga de CardView para que coincida con la experiencia del usuario una vez que se inscriban.

Para hacer eso tengo una sola actividad que anima fragmentos en de la parte inferior y los fragmentos existentes en la parte superior para emular desplazamiento. Este desplazamiento falso se produce cuando el usuario introduce datos y pulsa junto al avance. Esto funciona bastante bien excepto por un caso. Cuando tenemos un EditText para la entrada, el teclado aparece y cubre el botón 'siguiente' en la parte inferior de la pantalla.

En nuestras pruebas de usuario hemos notado un alto porcentaje de usuarios que intentan desplazar la tarjeta hasta llegar al siguiente botón en lugar de descartar el teclado.

He pasado mucho tiempo sin éxito tratando de obtener el CardView para desplazarse hasta revelar el botón y estoy fuera de ideas y en busca de nuevos.

El diseño de actividad de registro sólo contiene un FrameLayout en el que carga Fragmentos. Cada fragmento que se carga tiene un CardView para el diseño raíz.

En el manifiesto he establecido la actividad de windowsSoftInputMode para adjustResize, adjustPan con poco éxito.

activity_signup.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/signUpContent" android:layout_width="match_parent" android:layout_height="match_parent"/> 

fragment_enter_code.xml simplificado

 <android.support.v7.widget.CardView style="@style/CardViewStyle.SignUp" 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="wrap_content" app:cardCornerRadius="25dp" app:cardElevation="2dp" app:cardUseCompatPadding="true" app:contentPadding="8dp"> <EditText android:id="@+id/codeEditText" style="@style/HintedEditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Code" android:inputType="text"/> <Button style="@style/NextButton" android:id="@+id/nextButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:enabled="false" android:text="@string/next"/> </android.support.v7.widget.CardView> 

Cuando intenté poner el CardView en un ScrollView el diseño del cardview (con fillViewport verdad), consigo una barra de desplazamiento pero la tarjeta no rueda y la disposición cardview consigue ensuciada para arriba.

¿Alguien sabe que el windoSoftInputMode es lo suficientemente bueno como para señalarme en la dirección correcta? ¿O es el CardView simplemente no va a desplazarse fuera de un contenedor que es el diseño para mantenerlos?

Parece que la solución a esto es manipular la vista de la actividad no los fragmentos.

Acabé creando una nueva aplicación para jugar con este problema y noté que si tuviera un diseño que no contenía un CardView cuyo diseño raíz era un ScrollView no se desplazaba a menos que las actividades windowSoftInputMode se establezca en adjustResize y luego se desplazará.

Luego hice un diseño con un <ScrollView><CardView><content...></CardView></ScrollView> y el tamaño de la CardView siempre era el tamaño de fila por defecto de una tarjeta y no coincidía conparent. Resolví eso con fillViewPort = "true" en el ScrollView pero cuando el teclado apareció no se desplazaría.

Resulta que la salsa secreta era poner un FrameLayout (o cualquier otro diseño) entre el CardView y el ScrollView.

Usted todavía tiene que dar cuenta de la redimensionamiento de la disposición para evitar que los elementos de vista no se apilan unos sobre otros, pero una vez que lo hace ahora obtener la vista por encima del teclado suave para desplazarse y la capacidad de llegar al resto de la interfaz de usuario con un CardView .

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="match_parent" android:fillViewport="true"> <FrameLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" app:cardCornerRadius="35dp" app:cardElevation="2dp" app:cardUseCompatPadding="true" app:contentPadding="8dp"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="200dp" android:src="@drawable/common_ic_googleplayservices"/> <EditText android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="50dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_below="@id/image" android:hint="Input" android:inputType="text"/> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/input" android:orientation="vertical" android:gravity="bottom|center_horizontal"> <Button android:id="@+id/nextButton" android:layout_width="match_parent" android:layout_height="48dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:enabled="false" android:text="Next"/> </LinearLayout> </RelativeLayout> </android.support.v7.widget.CardView> </FrameLayout> </ScrollView> 
  • Cómo agregar un encabezado desplazable a un gridview en android?
  • OverScrollBy no siempre se recupera en la plataforma Lollipop (5.x)
  • No se puede usar el diseño de ScrollView dentro de SlidingUpPanelLayout Xamarin Android
  • Añadiendo un lineal lineal dinámico a la vista actual android
  • Android: ScrollView fuerza a la parte inferior
  • ¿Cómo evitar que una vista de desplazamiento se desplace a una vista web después de cargar los datos?
  • Android ScrollView (desplazable en Horizontal y Vertical suavemente) en el que el contenido se puede agregar programable y zoomable en pinch
  • Android parent onTouchEvent secuestro de niños onTouchEvent
  • Añadir un encabezado pegajoso al desplazamiento de paralaje - android
  • Android: Imagen de fondo redimensionar en pop-up de teclado
  • Utilice RecyclerView dentro de ScrollView con la altura de artículo de Recycler flexible
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.