我正在尝试在ScrollView中安装RecyclerView。我的问题是,当我滚动RecyclerView时,这不是“平滑”:只要你松开手指,滚动就会立即停止。
我在片段中的布局是:
我尝试禁用嵌套滚动:
mRecyclerView.setNestedScrollingEnabled(false)
并包装mRecyclerView的内容:
android:layout_height="wrap_content"
获得我想要的平滑滚动,但以这种方式,RecyclerView的高度比它应该小(并且它不再滚动,所以我看不到一些项目。)
我目前正在使用支持库23.4.0(我也尝试了23.2.1,同样的问题)
任何帮助?
答案 0 :(得分:0)
这个问题在我的夜晚破坏了。 :)
当RecyclerView
位于第一个屏幕上时(可见而不滚动),前面的视图会影响其高度。当RecyclerView
最初完全不可见时(需要向下滚动整个屏幕),其高度是正确的。
当LinearLayout
内ScrollView
测量其子项时,它会传递MeasureSpec
的模式UNSPECIFIED
剩余的像素数。
RecyclerView
将此规范传递给LayoutManager
,并且它遵循传递的高度,如果它不为空,即使它是UNSPECIFIED
。
扩展RecyclerView
并覆盖RecyclerView#onMeasure
,当高度指标规格为UNSPECIFIED
时,只需将零传递给super.onMeasure
。
爪哇:
@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
)
}