我想在可滚动的LinearLayout
内滚动RecyclerView
(我可以动态地添加项目)。在启动时,我最初可以看到一个小滚动条(表示它是一个可滚动的视图,在几秒钟内消失)。尝试使用appCompat NestedScrollView以及启用nestedScrollingEnabled
,但没有成功。如何在LinearLayout
内部RecyclerView
滚动?
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="300dp"
android:fillViewport="true"
android:nestedScrollingEnabled="true">
<LinearLayout
android:id="@+id/playerlist_linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="7dp"
android:orientation="vertical">
</LinearLayout>
</ScrollView>
</FrameLayout>
RecyclerView代码
<android.support.v7.widget.RecyclerView
android:id="@+id/messagesListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_weight="1"
android:nestedScrollingEnabled="false"/>
更新:我发现滚动确实有效,但只有当我在滚动视图中垃圾邮件或快速点击时才会滚动。它有点集中,只要按住鼠标就可以滚动。真奇怪。
答案 0 :(得分:3)
尝试在触摸scrollview
时禁用回收者视图。
ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView1);
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// Disallow the touch request for parent scroll on touch of child view
view.getParent().requestDisallowInterceptTouchEvent(false);
return true;
}
});
答案 1 :(得分:3)
我通过在rafsanahmad007的解决方案中添加一行来解决它:
ScrollView scrollView = (ScrollView)findViewById(R.id.scrollView1);
scrollView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
// Disallow the touch request for parent scroll on touch of child view
view.getParent().requestDisallowInterceptTouchEvent(false);
view.onTouch(motionEvent);
return true;
}
});
我不确定如何在Java上调用View.onTouch
,因为我正在使用Xamarin.Android(C#)进行开发。它应该非常相似。
答案 2 :(得分:0)
我终于找到了另一种在 RecyclerView viewHolder 中滚动 ScrollView 的方法。我最初发布了我的答案 here,因此您可以查看我的答案,了解如何在 RecyclerView 中启用 ScrollView 的滚动。希望这对查找其他答案的人有所帮助。
但我也想从 OP 的问题中回答为什么 ScrollView 上有一个小滚动条。您可以通过在 xml 布局中的 ScrollView 标记中添加 android:scrollbars="none"
来隐藏滚动条,也可以删除 android:nestedScrollingEnabled="true"
,因为它在这种情况下没有用。
<ScrollView
android:layout_width="wrap_content"
android:layout_height="300dp"
android:fillViewport="true"
android:scrollbars="none">
<LinearLayout
android:id="@+id/playerlist_linear"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="7dp"
android:orientation="vertical">
</LinearLayout>
</ScrollView>