我使用SwipeRefreshLayout
作为布局的根元素,因为我需要在屏幕上刷新所有。布局如下:
<SwipeRefreshLayout>
<CoordinatorLayout>
<ViewPager />
<AppBarLayout>
<Toolbar />
<FrameLayout>
...
</FrameLayout>
<TabLayout />
</CoordinatorLayout>
</SwipeRefreshLayout>
当我向下滑动布局时,屏幕顶部会显示SwipeRefreshLayout
的刷新圈,位于Toolbar
之上。所以我使用SwipeRefreshLayout#setProgressViewOffset
使圆圈从工具栏高度的偏移量开始,但是当刷新完成时,圆圈会在工具栏上奇怪地挂起片刻,然后消失:screenshot
如何在工具栏下创建刷新圈?
答案 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>