android: RecyclerView inside a ScrollView (or parallax)
android: RecyclerView inside a ScrollView (or parallax)
我有一个片段 2 cardviews,里面有多个控件。
下面 第二个卡片视图我有一个 recyclerview,这个工作 完美.
问题是 recyclerview 开始 屏幕底部,并且滚动 recyclerview 非常小。
以前使用的是列表视图,这让我适合你的内容,因此可以立即在屏幕上滚动,但使用 recylclerview 不能。
当我在 recyclerview 中滚动时,如何使控件像视差效果一样上升?
编辑:更清楚,想象一个片段中有 2 个 cardview,它们占据了屏幕的 80%,在这些之上,一个带有 100 个项目列表的 recyclerview,但是滚动太小了......列表视图让我适应 "content" 并立即滚动整个屏幕。
这是我的 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>
这是截图:
putting a fixed height works !!! but I need to calculate the height of
the number of items in the list
这适用于列表视图(我没有用 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);
}
来源:
Full example
在上述情况下,您需要做的是在同一个recyclerview
中使用多个ViewHolders
。
我看到你那里有三种类型的布局。 recyclerview
.
中的前两张卡片和其他布局
RecyclerView with multiple View Types 举例说明如何在简单的回收视图中使用多个视图类型。
我有一个片段 2 cardviews,里面有多个控件。
下面 第二个卡片视图我有一个 recyclerview,这个工作 完美.
问题是 recyclerview 开始 屏幕底部,并且滚动 recyclerview 非常小。
以前使用的是列表视图,这让我适合你的内容,因此可以立即在屏幕上滚动,但使用 recylclerview 不能。
当我在 recyclerview 中滚动时,如何使控件像视差效果一样上升?
编辑:更清楚,想象一个片段中有 2 个 cardview,它们占据了屏幕的 80%,在这些之上,一个带有 100 个项目列表的 recyclerview,但是滚动太小了......列表视图让我适应 "content" 并立即滚动整个屏幕。
这是我的 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>
这是截图:
putting a fixed height works !!! but I need to calculate the height of the number of items in the list
这适用于列表视图(我没有用 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);
}
来源:
Full example
在上述情况下,您需要做的是在同一个recyclerview
中使用多个ViewHolders
。
我看到你那里有三种类型的布局。 recyclerview
.
RecyclerView with multiple View Types 举例说明如何在简单的回收视图中使用多个视图类型。