RecyclerView 在 ScrollView 上并不是真正的 wrap_content
Posted
技术标签:
【中文标题】RecyclerView 在 ScrollView 上并不是真正的 wrap_content【英文标题】:RecyclerView is not trully wrap_content at the ScrollView 【发布时间】:2017-10-26 17:54:26 【问题描述】:我有一个ScrollView,
,其中包含一个垂直的LinearLayout.
这是一个地方,我在其中添加了一些称为“部分”的视图。 “Section”是一个LinearLayout,
,其中包含一个TextView
和`RecyclerView。
<ScrollView
android:id="@+id/main_scrollview"
android:layout_
android:layout_>
<LinearLayout
android:id="@+id/sections_layout"
android:layout_
android:layout_
android:orientation="vertical" />
</ScrollView>
部分:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical">
<TextView
android:id="@+id/title"
android:layout_
android:layout_
android:layout_centerVertical="true"
android:textSize="@dimen/activity_starred_title_textsize" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_
android:layout_ />
</LinearLayout>
问题是RecyclerView
有时并不是真正的wrap_content
。因此它会产生两种类型的问题(取决于我尝试使用的解决方案类型)。
它可以是不可滚动的(因此它与屏幕高度匹配,我无法向下滚动以查看里面的其余项目)。
可以嵌套滚动。
原来的问题是它有嵌套滚动。所以我希望RecyclerViews
与垂直LinearLayouts
一样简单,并且唯一必须具有滚动效果的是root ScrollView.
我尝试过做什么?
扩展GridLayoutManager
并覆盖canScrollVertically().
方法:
public boolean canScrollVertically() 返回假;
扩展RecyclerView
类并覆盖
@覆盖 公共布尔 onInterceptTouchEvent(MotionEvent 事件) 返回假;
@覆盖 公共布尔 onTouchEvent(MotionEvent 事件) 返回假;
在任何可能的地方通过xml
禁用NestedScrolling
。
使用此解决方案覆盖 GridLayoutManager
:SOLUTION
【问题讨论】:
您是否尝试在布局中将 ScrollView 替换为 NestedScrollView? @Buckstabue 没有。我现在试试。 Tnx @Buckstabue 有帮助!不仅如此,无论如何都要感谢! 类似的问题。 ***.com/questions/39267532/… 【参考方案1】:不要在ScrollView
中使用RecyclerView
或ListView
。对于嵌套滚动,您应该使用NestedScrollView
。
NestedScrollView
和ScrollView
一样,但它支持充当nested
在新旧版本上都滚动父和子 安卓的。默认启用嵌套滚动。
解决方案:
1.不要使用ScrollView
,而是使用NestedScrollView
作为Section
部分的容器(RecyclerView
和其他Views
)。
<android.support.v4.widget.NestedScrollView
android:id="@+id/main_scrollview"
android:layout_
android:layout_>
<LinearLayout
android:id="@+id/sections_layout"
android:orientation="vertical"
android:layout_
android:layout_>
<!-- Your Section:: RecyclerView and other Views -->
</LinearLayout>
</android.support.v4.widget.NestedScrollView>
2. 对于滚动问题,请使用 setNestedScrollingEnabled(false)
到您的 RecyclerView
。
【讨论】:
【参考方案2】:接下来是解决方案: 1.使用NestedScrollView 2.覆盖GridLayoutManager.canScrollVertically():
public boolean canScrollVertically() return false;
【讨论】:
以上是关于RecyclerView 在 ScrollView 上并不是真正的 wrap_content的主要内容,如果未能解决你的问题,请参考以下文章
我应该使用 ScrollView 还是 RecyclerView 在片段中滚动?
解决ScrollView嵌套RecyclerView的显示及滑动问题
ScrollView 内的 Recyclerview 滚动不顺畅