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.
- ¿Cómo hacer Pan automático (desplazamiento) con AChartEngine gráfico de línea dinámica junto con el eje X?
- ViewPager dentro de ScrollView - el desplazamiento vertical no funciona
- ¿Cómo puede saber si una vista es visible en la pantalla en Android?
- Leer el tamaño de diseño al inicio de la aplicación
- Cómo agregar ScrollView a GLSurfaceview en Opengl ES2.0 en Android
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.
- Android RelativeLayout cambiar altura de forma programática
- Detectar el fin del fling en ScrollView
- Mostrar más en ScrollView horizontal en android
- HorizontalScrollView dentro de ScrollView Touch Handling
- Detectar final de ScrollView
- Recyclerview en un fragmento no muestra nada
- ¿Cómo hacer zoomview scrollview?
- Android Twitter - Hacer clic en la pestaña Actualizar y ocultar
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>
- Android Studio 0.8.2 URI tiene un componente de autoridad
- ¿Cómo se puede pasar JSON a AngularJS en la vista web de Android?