I have a ScrollView, which contains a vertical LinearLayout. This is a place, where I add some amount of Views called "Section". "Section" is a LinearLayout, which contains a TextView and `RecyclerView.
<ScrollView
android:id="@+id/main_scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/sections_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" />
</ScrollView>
section:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="@dimen/activity_starred_title_textsize" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
The problem is that RecyclerView is not truly wrap_content sometimes. Therefore it creates 2 types of problems (depending on solution type I'm trying to use).
It can be unscrollable (so it matches screen height and I can't scroll it down to see rest of items inside).
It can scroll nested.
Originally problem is that it has nested scrolling. So I want RecyclerViews to be as simple vertical LinearLayouts and the only thing that has to have scrolling effect is root ScrollView.
What have I tried to do?
extend the GridLayoutManager and override canScrollVertically(). method:
public boolean canScrollVertically(){ return false; }
extend RecyclerView class and override
@Override public boolean onInterceptTouchEvent(MotionEvent event){ return false; }
@Override public boolean onTouchEvent(MotionEvent event){ return false; }
Disable NestedScrolling via xml everywhere, where it is possible.
Override GridLayoutManager using this solution: SOLUTION
card view inside the ScrollView (now ScrollView contains RecyclerView ) - can see the card up until the RecyclerView. initial thought was to implement this viewGroup using RecyclerView instead of ScrollView where one of it's views type is the CardView but i got the exact same results as with the ScrollView.
In the practical on scrolling views, you use ScrollView to scroll a View or ViewGroup . ScrollView is easy to use, but it's not recommended for long, scrollable lists. RecyclerView is a subclass of ViewGroup and is a more resource-efficient way to display scrollable lists.
To help you build apps with lists, Android provides the RecyclerView . RecyclerView is designed to be very efficient, even with large lists, by reusing, or recycling, the views that have scrolled off the screen.
WRAP_CONTENT means that the view wants to be just large enough to fit its own internal content, taking its own padding into account.
Don't use RecyclerView or ListView inside ScrollView. For nested scrolling you should use NestedScrollView.
NestedScrollViewis just likeScrollView, but it supports acting as both anestedscrolling parent and child on both new and old versions of Android. Nested scrolling is enabled by default.
SOLUTION:
1. Instead of using ScrollView, use NestedScrollView as container of your Section part(RecyclerView and other Views).
<android.support.v4.widget.NestedScrollView
android:id="@+id/main_scrollview"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/sections_layout"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- Your Section:: RecyclerView and other Views -->
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
2. For scrolling issue use setNestedScrollingEnabled(false) to your 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