3

私は、その子の間にAppBarLayout水平を含む を持っています。RecyclerViewの兄弟はAppBarLayout(ViewPager垂直の を含むRecyclerView) です。

XML は次のとおりです。

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinatorLayout"
    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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ui.search.SearchResultFragment">

<android.support.v4.view.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:elevation="@dimen/d2"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <LinearLayout
        android:id="@+id/header_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:background="@color/white"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <ImageView
            android:id="@+id/back_image_view"
            android:layout_width="?attr/actionBarSize"
            android:layout_height="?attr/actionBarSize"
            android:scaleType="center"
            android:src="@drawable/ic_backarrow_gray"/>

        <android.support.v7.widget.RecyclerView
            android:id="@+id/query_terms_recycler_view"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_gravity="center_vertical"
            android:layout_weight="1"/>

        <ImageView
            android:id="@+id/search_image_view"
            android:layout_width="?attr/actionBarSize"
            android:layout_height="?attr/actionBarSize"
            android:scaleType="center"
            android:src="@drawable/ic_search_gray"/>

    </LinearLayout>

    <android.support.v7.widget.RecyclerView
        android:id="@+id/related_terms_recycler_view"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/search_term_bg"
        app:layout_scrollFlags="scroll|enterAlways"/>

    <android.support.design.widget.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/d8"
        android:background="@color/tab_and_nav_bar"/>

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

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

AppBarLayoutで正常にスクロールに応答できる別の UI が既にありToolbarます。コードはほとんど同じですが、この場合、 が折りたたまれてRecyclerViewいない/隠れていないため、何かが間違っています。

4

2 に答える 2

4
  • AppBarLayoutは単なる縦型LinearLayoutなので、順序が重要です。
  • をスクロール ジェスチャに反応させるのは、実際には属性scrollを介してフラグを定義することです。android:layout_scrollFlags

そのフラグの公式ドキュメントから、それを読むことができます

ビューは、スクロール イベントに直接関連してスクロールされます。他のフラグを有効にするには、このフラグを設定する必要があります。これより前の兄弟ビューにこのフラグがない場合、この値は効果がありません。

つまり、他の子にはフラグがないため、フラグは無視されます。この背後にある理由は、上部のビューのみを非表示にしたいためだと思います.上部に何かがある場合、下部のビューは消えません.

したがって、この場合の解決策 (気に入らないかもしれません) は、次のいずれかです。

  • そのビューを一番上に移動して、それが終了する唯一のビューになるようにします。
  • すべてのビューにscrollフラグを立てます。それらは一緒に反応してスクロール ジェスチャを行いますが、これは望ましくない場合があります。

    <AppBarLayout>
        <RecyclerView ...
            android:layout_scrollFlags="scroll|enterAlways"/>
    
        <LinearLayout ... >
        <TabLayout ... >
    </AppBarLayout>
    
于 2015-06-29T10:14:20.217 に答える