Android CoordinatorLayout 具有复杂布局的行为

Android CoordinatorLayout Behaviour with complex layout

我有一个简单的布局,它是一个 CoordinatorLayout,在 AppBarLayoutRecyclerView 中包含一个 Toolbar。为了在内容加载到 RecyclerView 时允许进度条,我将其包装在 FrameLayout 旁边 ProgressBar ,我从另一个文件中包含了它。加载内容时,ProgressBar 设置为 VISIBLE,完成后设置为 GONE,显示 RecyclerView。我想使用 ScrollingViewBehavior 以便在我滚动 RecyclerView 时隐藏 Toolbar。我试过将它添加到 FrameLayoutRecyclerView 中,但似乎都不起作用。

我需要做什么才能获得我正在寻找的行为?我是否需要制作一个新的 ViewGroup 或类似的东西才能 show/hide ProgressBar 并为此定义一个新的 Behavior ,还是有更简单的东西?

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:minHeight="?attr/actionBarSize"
            android:theme="@style/ToolbarTheme"
            android:background="?attr/colorPrimary"/>
    </android.support.design.widget.AppBarLayout>

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="vertical"
            android:id="@+id/recycler_view" />

        <include layout="@layout/progress_circle" />

    </FrameLayout>

    <include layout="@layout/floating_action_button"/>
</android.support.design.widget.CoordinatorLayout>

我的设置与您几乎相同,但我添加了两个进度条。加载 activity 时会出现一个,并覆盖整个内容。第二个出现在滑动刷新上,仅替换 RecyclerView(好吧,实际上是 RecyclerView 的父级 SwipeRefreshLayout)。

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusableInTouchMode="true">

    <include layout="@layout/loading_progress"/>

    <android.support.design.widget.CoordinatorLayout
        android:id="@+id/coordinator_layout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="false">

        <android.support.design.widget.AppBarLayout
            android:id="@+id/app_bar"
            android:layout_width="match_parent"
            android:layout_height="@dimen/app_bar_height"
            android:fitsSystemWindows="false"
            android:theme="@style/AppTheme.AppBarOverlay">

            <android.support.design.widget.CollapsingToolbarLayout
                android:id="@+id/toolbar_layout"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:fitsSystemWindows="false"
                app:contentScrim="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways">

                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar_landing_page"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:layout_collapseMode="pin"
                    app:popupTheme="@style/AppTheme.PopupOverlay"/>

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

        <include layout="@layout/loading_progress"/>

        <android.support.v4.widget.SwipeRefreshLayout
            android:id="@+id/swipe_refresh"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="@dimen/landing_page_top_margin"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">

            <android.support.v7.widget.RecyclerView
                android:id="@+id/recycler_view"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

        </android.support.v4.widget.SwipeRefreshLayout>
    </android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

我的进度条是:

<ProgressBar
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/loading_progress"
    style="@android:style/Widget.ProgressBar.Inverse"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:visibility="gone"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

当需要显示进度条时,我将其设置为 View.VISIBLE 并将 SwipeRefreshLayout(或加载 Activity 时的 CoordinatorLayout)设置为 View.GONE。然后在加载数据时反转VISIBLE和GONE。