I have created a layout which has two RecyclerViews. One scrolls horizontally while other scrolls vertically. I can scroll correctly inside each RecyclerView but the page as a whole won't scroll i.e. top RecyclerView stays at top always and bottom one stays at bottom like both are fixed in position.
Following is my xml layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:hint="Search Dramas"
android:textSize="16sp"
android:paddingLeft="10dp"
android:gravity="center"
android:textColor="@color/dark_grey"
android:textColorHint="@color/dark_grey"
android:background="@drawable/border_bottom"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_bottom_background_black"
android:textColor="@color/white"
android:padding="10dp"
android:text="Most Watched"/>
<!-- A RecyclerView to display horizontal list -->
<android.support.v7.widget.RecyclerView
android:id="@+id/featured"
android:scrollbars="none"
android:layout_width="fill_parent"
android:layout_height="240dp"
android:paddingLeft="0dp"
android:paddingRight="15dp"
android:paddingTop="15dp"
android:paddingBottom="25dp"
android:background="@color/black"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_bottom_backgroundless"
android:textColor="@color/dark_grey"
android:padding="10dp"
android:text="All Dramas"/>
<!-- A RecyclerView to display vertical list -->
<android.support.v7.widget.RecyclerView
android:id="@+id/pick_item"
android:scrollbars="vertical"
android:layout_width="fill_parent"
android:layout_height="match_parent"/>
</LinearLayout>
I was able to solve the problem by putting everything inside ScrollView and then setting height of vertical RecyclerView manually/programmatically.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/scrollView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="50dp"
android:hint="Search Dramas"
android:textSize="16sp"
android:paddingLeft="10dp"
android:gravity="center"
android:textColor="@color/dark_grey"
android:textColorHint="@color/dark_grey"
android:background="@drawable/border_bottom"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_bottom_background_black"
android:textColor="@color/white"
android:padding="10dp"
android:text="Most Watched"/>
<!-- A RecyclerView to display horizontal list -->
<android.support.v7.widget.RecyclerView
android:id="@+id/featured"
android:scrollbars="none"
android:layout_width="fill_parent"
android:layout_height="240dp"
android:paddingLeft="0dp"
android:paddingRight="15dp"
android:paddingTop="15dp"
android:paddingBottom="25dp"
android:background="@color/black"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/border_bottom_backgroundless"
android:textColor="@color/dark_grey"
android:padding="10dp"
android:text="All Dramas"/>
<!-- A RecyclerView to display list -->
<android.support.v7.widget.RecyclerView
android:id="@+id/pick_item"
android:paddingBottom="20dp"
android:scrollbars="vertical"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:minHeight="840dp"/>
</LinearLayout>
</ScrollView>
Setting RecyclerView's height programmatically:
LinearLayout.LayoutParams params = new
LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
// calculate height of RecyclerView based on child count
params.height=1150;
// set height of RecyclerView
recyclerView.setLayoutParams(params);
RecyclerView only gained (still limited) support for nested scrolling in version 22.2.0 - my first suggestion would be to try that.
The only view that fully supports nested scrolling is NestedScrollView (you can see this by noting that it implements both NestedScrollingChild and NestedScrollingParent) and was added in Support v4 version 22.1.0 (slightly improved in 22.2.0). If you only have a single horizontal RecyclerView
as the topmost item in your vertical RecyclerView
, you could instead replace that with a NestedScrollView
that contains a LinearLayout
with your horizontal RecyclerView
followed by your vertical RecyclerView
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With