Search code examples
androidscrollviewandroid-linearlayoutandroid-recyclerview

Scolling with multiple RecyclerViews in Layout


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>

How activity looks


Solution

  • 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);