在AppBarLayout中的工具栏下创建SwipeRefreshLayout

时间:2016-09-15 09:28:59

标签: android android-toolbar swiperefreshlayout android-appbarlayout

我使用SwipeRefreshLayout作为布局的根元素,因为我需要在屏幕上刷新所有。布局如下:

<SwipeRefreshLayout>
    <CoordinatorLayout>
        <ViewPager />
        <AppBarLayout>
            <Toolbar />
            <FrameLayout>
                ...
            </FrameLayout>
        <TabLayout />
    </CoordinatorLayout>
</SwipeRefreshLayout>

当我向下滑动布局时,屏幕顶部会显示SwipeRefreshLayout的刷新圈,位于Toolbar之上。所以我使用SwipeRefreshLayout#setProgressViewOffset使圆圈从工具栏高度的偏移量开始,但是当刷新完成时,圆圈会在工具栏上奇怪地挂起片刻,然后消失:screenshot

如何在工具栏下创建刷新圈?

3 个答案:

答案 0 :(得分:2)

似乎您希望实施coplanar indicator,如Material Design Guidelines中所述。为此,您应使用setProgressViewEndTarget()setProgressViewOffset()方法:

// This method will offset the end of the indicator animation
int target = getResources().getDimensionPixelSize(R.dimen.indicator_end_target);
mSwipeRefreshLayout.setProgressViewEndTarget(true, target);

// This method allows you to set both the start and end values for the indicator animation
int start = getResources().getDimensionPixelSize(R.dimen.indicator_start);
int end = getResources().getDimensionPixelSize(R.dimen.indicator_end);
mSwipeRefreshLayout.setProgressViewOffset(true, start, end);

通过在每个方法中将第一个参数设置为true,指示器将在其进入视图时为其缩放设置动画,而不是仅仅在包含视图的边缘进行剪切。

答案 1 :(得分:0)

您的toolbar应该在SwipeRefreshLayout之外。请按以下步骤进行操作

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar />
            <FrameLayout>
                ...
            </FrameLayout>
        <TabLayout />
    </AppBarLayout>
    <SwipeRefreshLayout>
        <NestedScrollView>
            <ViewPager />
    </SwipeRefreshLayout>
</CoordinatorLayout>

答案 2 :(得分:0)

你真的想要展示圈子吗?如果要在FrameLayout上显示它,则应将swipeRefreshLayout置于FrameLayout之上,而不将SwipeRefreshLayout设置为根视图。

试试这个并告诉我它是否有效。

<CoordinatorLayout>
    <NestedScrollView>
        <ViewPager />
    <AppBarLayout>
        <Toolbar />
        <SwipeRefreshLayout>
           <FrameLayout>
              ...
           </FrameLayout>
        </SwipeRefreshLayout>
    <TabLayout />
</CoordinatorLayout>