在 AppBarLayout 的 Toolbar 下制作 SwipeRefreshLayout
Make SwipeRefreshLayout under Toolbar in AppBarLayout
我使用 SwipeRefreshLayout
作为布局的根元素,因为我需要刷新屏幕上的 所有内容 。布局如下:
<SwipeRefreshLayout>
<CoordinatorLayout>
<ViewPager />
<AppBarLayout>
<Toolbar />
<FrameLayout>
...
</FrameLayout>
<TabLayout />
</CoordinatorLayout>
</SwipeRefreshLayout>
当我在布局上向下滑动时,SwipeRefreshLayout
的刷新圆圈从屏幕顶部出现在 Toolbar
的顶部。所以我使用 SwipeRefreshLayout#setProgressViewOffset
使圆圈从工具栏高度的偏移量开始,但是当刷新完成时,圆圈会奇怪地挂在工具栏上一会儿然后消失: screenshot
如何在工具栏下方设置刷新圈?
你的 toolbar
应该在 SwipeRefreshLayout
外面。如下操作
<CoordinatorLayout>
<AppBarLayout>
<Toolbar />
<FrameLayout>
...
</FrameLayout>
<TabLayout />
</AppBarLayout>
<SwipeRefreshLayout>
<NestedScrollView>
<ViewPager />
</SwipeRefreshLayout>
</CoordinatorLayout>
您真的要显示圆圈吗?如果你想在 FrameLayout 上显示它,你应该将 swipeRefreshLayout 放在 FrameLayout 之上,而不是将 SwipeRefreshLayout 设置为根视图。
试试这个,如果有效请告诉我。
<CoordinatorLayout>
<NestedScrollView>
<ViewPager />
<AppBarLayout>
<Toolbar />
<SwipeRefreshLayout>
<FrameLayout>
...
</FrameLayout>
</SwipeRefreshLayout>
<TabLayout />
</CoordinatorLayout>
您似乎想要实现一个 coplanar indicator, as documented in the 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
,指示器将在其进入视图时对其比例进行动画处理,而不是仅仅被包含视图的边缘裁剪。
我使用 SwipeRefreshLayout
作为布局的根元素,因为我需要刷新屏幕上的 所有内容 。布局如下:
<SwipeRefreshLayout>
<CoordinatorLayout>
<ViewPager />
<AppBarLayout>
<Toolbar />
<FrameLayout>
...
</FrameLayout>
<TabLayout />
</CoordinatorLayout>
</SwipeRefreshLayout>
当我在布局上向下滑动时,SwipeRefreshLayout
的刷新圆圈从屏幕顶部出现在 Toolbar
的顶部。所以我使用 SwipeRefreshLayout#setProgressViewOffset
使圆圈从工具栏高度的偏移量开始,但是当刷新完成时,圆圈会奇怪地挂在工具栏上一会儿然后消失: screenshot
如何在工具栏下方设置刷新圈?
你的 toolbar
应该在 SwipeRefreshLayout
外面。如下操作
<CoordinatorLayout>
<AppBarLayout>
<Toolbar />
<FrameLayout>
...
</FrameLayout>
<TabLayout />
</AppBarLayout>
<SwipeRefreshLayout>
<NestedScrollView>
<ViewPager />
</SwipeRefreshLayout>
</CoordinatorLayout>
您真的要显示圆圈吗?如果你想在 FrameLayout 上显示它,你应该将 swipeRefreshLayout 放在 FrameLayout 之上,而不是将 SwipeRefreshLayout 设置为根视图。
试试这个,如果有效请告诉我。
<CoordinatorLayout>
<NestedScrollView>
<ViewPager />
<AppBarLayout>
<Toolbar />
<SwipeRefreshLayout>
<FrameLayout>
...
</FrameLayout>
</SwipeRefreshLayout>
<TabLayout />
</CoordinatorLayout>
您似乎想要实现一个 coplanar indicator, as documented in the 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
,指示器将在其进入视图时对其比例进行动画处理,而不是仅仅被包含视图的边缘裁剪。