当前位置: 首页 > 知识库问答 >
问题:

Android: RecyclerView in a ScrollView

师野
2023-03-14

我试图在ScrollView中有一个RecyclerView。我的问题是,当我滚动RecyclerView时,这并不“平滑”:一旦你松开手指,滚动就会立即停止。

我在片段中的布局是:

  • 滚动视图
    • 线性布局
      • 文本视图
      • 回收r查看
      • 按钮

      我尝试禁用嵌套滚动:

      mRecyclerView.setNestedScrollingEnabled(false)
      

      以及mRecyclerView的包装内容:

      android:layout_height="wrap_content"
      

      获得我想要的平滑滚动,但通过这种方式,RecyclerView的高度比它应该的要小(并且它不再滚动,所以我看不到一些项目)。

      我目前正在使用支持库23.4.0(我也尝试了23.2.1,同样的问题)

      有什么帮助吗?

共有1个答案

魏松
2023-03-14

这个问题毁了我的夜晚。:)

当< code > recycle view 在第一个屏幕上时(无需滚动即可看到),前面的视图会影响其高度。当< code > recycle view 最初完全不可见时(需要向下滚动整个屏幕),其高度是正确的。

当<code>LinearLayout<code>在<code>ScrollView<code>内测量其子级时,它会传递作为<code>测量RecyclerView将此规范传递给LayoutManager,如果它不为空,则它遵守传递的高度,即使它是未指定的

扩展< code > recycle view 并覆盖< code > recycle view # on measure ,当高度测量规格为< code >未指定时,只需将零传递给< code>super.onMeasure。

Java:

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    super.onMeasure(
        widthSpec,
        MeasureSpec.getMode(heightSpec) == MeasureSpec.UNSPECIFIED ? 0 : heightSpec
    )
}

科特林:

override fun onMeasure(widthSpec: Int, heightSpec: Int) {
    super.onMeasure(
        widthSpec,
        if (MeasureSpec.getMode(heightSpec) == MeasureSpec.UNSPECIFIED) 0
        else heightSpec
    )
}
 类似资料:

相关问答

相关文章

相关阅读