studio - android: RecyclerView dentro de ScrollView(o paralaje)
grid layout and cardview (2)
Tengo un fragmento con 2 vistas de tarjeta con controles múltiples dentro.
debajo del segundo cardview tengo una vista recicladora , esto funciona perfecto .
el problema es que la vista del reciclador comienza muy abajo de la pantalla , y desplazarse por la vista recylcer es muy pequeña .
anteriormente utilicé una vista de lista, y esto me mantuvo en forma para su contenido y así hacer desplazarse por la pantalla de una vez, pero con recylclerview no puedo.
¿Cómo hacer cuando me desplazo en la vista recycler, los controles suben como efecto de paralaje?
EDITAR: más claro, imagine 2 vistas de tarjeta en un fragmento, estas ocupan el 80% de la pantalla, encima de estas, una vista recicladora con una lista de 100 elementos, pero el desplazamiento es tan pequeño ... la vista de lista me permite adaptarme a la " contenido "y desplazarse por toda la pantalla a la vez.
este es mi diseño XML:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/svScroll"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<include
android:id="@+id/cvCampos1"
layout="@layout/ctlcabeceralibreta" />
<include
android:id="@+id/cvCampos2"
layout="@layout/ctlcabeceralibreta2" />
<android.support.v7.widget.RecyclerView
android:id="@+id/rvRegistros"
android:layout_width="fill_parent"
android:layout_height="1000dp"
android:layout_below="@id/cvCampos2"
android:scrollbars="vertical" />
</RelativeLayout>
</ScrollView>
esta es la captura de pantalla:
poner una altura fija funciona !!! pero necesito calcular la altura de la cantidad de elementos en la lista
esto funciona para listviews (no lo probé con recyclerview)
public static void setListViewHeightBasedOnChildren(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
// pre-condition
return;
}
int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom();
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
if (listItem instanceof ViewGroup) {
listItem.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
}
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
Src:
Ejemplo completo
En el caso anterior, lo que debe hacer es usar varios ViewHolders
en la misma vista de recyclerview
.
Veo que tienes tres tipos de diseños allí. Las primeras dos cartas y otros diseños en su vista de recyclerview
.
RecyclerView con múltiples tipos de vista le da un ejemplo de cómo usar múltiples tipos de vista en una simple vista de reciclador.