具有可滚动父级

时间:2017-04-19 09:18:18

标签: android

我的活动中有多个视图,包括2个垂直(1行)RecyclerViews。我使用setNestedScrollingEnabled(false)禁用了RecyclerViews上的滚动,只是想让整个活动可滚动。 这并不像预期的那样奏效。触摸RecyclerViews(我的AppBarLayout)之外的视图会触发滚动,但只要我尝试在其中一个RecyclerViews内滚动,它就不再有效了。我是否必须将触摸事件传递给我的主视图,还是有其他解决方案?

我的布局看起来像这样(剥离):

<android.support.design.widget.AppBarLayout>

    <android.support.design.widget.CollapsingToolbarLayout>

        <RelativeLayout>

            <ImageView>

            <LinearLayout>

                <TextView />

                <TextView />

            </LinearLayout>

        </RelativeLayout>

        <android.support.v7.widget.Toolbar />

    </android.support.design.widget.CollapsingToolbarLayout>

</android.support.design.widget.AppBarLayout>

<LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <Button />

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipToPadding="false"
            android:scrollbars="none" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1">

        <Button />

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:clipToPadding="false"
            android:scrollbars="none" />

    </LinearLayout>
</LinearLayout>

编辑:刚刚添加了一张图片。触摸红色部分按预期滚动整个活动,但触摸蓝色部分不会滚动任何内容。 enter image description here

3 个答案:

答案 0 :(得分:5)

在NestedScrollView

中使用RecyclerView
 <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

 <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:nestedScrollingEnabled="false" />

 <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:nestedScrollingEnabled="false" />


  </LinearLayout>

    </android.support.v4.widget.NestedScrollView>

答案 1 :(得分:4)

  1. 使用Button作为RecyclerViewapp:layout_behavior="@string/appbar_scrolling_view_behavior"布局的容器。
  2. NestedScrollView设为CoordinatorLayout
  3. 使用<android.support.design.widget.CoordinatorLayout> <android.support.design.widget.AppBarLayout> <android.support.design.widget.CollapsingToolbarLayout> <RelativeLayout> <ImageView> <LinearLayout> <TextView /> <TextView /> </LinearLayout> </RelativeLayout> <android.support.v7.widget.Toolbar /> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <Button /> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false" android:scrollbars="none" /> </LinearLayout> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <Button /> <android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false" android:scrollbars="none" /> </LinearLayout> </LinearLayout> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> 作为根布局。
  4. 尝试此结构:

    postgresql.conf

    希望这会有所帮助〜

答案 2 :(得分:0)

覆盖onInterceptTouchEvent方法并返回true。这会阻止孩子处理触摸事件。

@Override

public boolean onInterceptTouchEvent(MotionEvent ev)
{
    return true;
}