具有复杂布局的Android CoordinatorLayout行为

时间:2016-08-25 14:42:16

标签: android android-layout android-recyclerview android-framelayout

我有一个简单的布局,CoordinatorLayout包含ToolbarAppBarLayout中的RecyclerView。要在将内容加载到RecyclerView时将进度条包含在FrameLayout中,并将ProgressBar与我从其他文件中包含的ProgressBar一起包装。加载内容后,VISIBLE设置为GONE,当它完成时,它设置为RecyclerView,显示ScrollingViewBehavior。我想使用RecyclerView,以便在滚动Toolbar FrameLayout时隐藏RecyclerView。我已尝试将其添加到ViewGroupProgressBar,但似乎都无效。

我需要做些什么来获得我正在寻找的行为?我是否需要制作新的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> 并为其定义新的<select name="form" onchange="location = this.value;"> <option value="Home.php">Home</option> <option value="Contact.php">Contact</option> <option value="Sitemap.php">Sitemap</option> </select> ,或者是否有更简单的内容?

X = 10;
Y = 10;
spread = 4; 
--Spread is the Length of the Constraint. You may have to increase this, especially if it's stiff.

function createAttachments()
    --This is under the assumption that gParts is a table filled with the Part Instances
    for i,v in pairs(gParts) do
        local atch = Instance.new("Attachment",v);
    end;
end;

function connectConstraints(part,x,y)
    if x ~= X then
        connectRight = x+1.." "..y;
    end;
    if y ~= Y then
        connectDown = x.." "..y+1;
    end;
    if connectRight ~= nil then
        local ropeconst = Instance.new("RopeConstraint",part);
        ropeconst.Length = spread;
        ropeconst.Attachment0 = part.Attachment;
        ropeconst.Attachment1 = connectRight.Attachment;
    end;
    if connectLeft ~= nil then
        local ropeconst = Instance.new("RopeConstraint",part);
        ropeconst.Length = spread;
        ropeconst.Attachment0 = part.Attachment;
        ropeconst.Attachment1 = connectLeft.Attachment;
    end
end

createAttachments();
connectConstraints();

1 个答案:

答案 0 :(得分:1)

我的设置几乎相同,但我已经包含了两个进度条。加载活动时会出现一个,并涵盖整个事件。第二个出现在刷卡刷新上,只替换了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。