在ActionBar后面的SwipeRefreshLayout

当将SwipeRefreshLayout与叠加模式ActionBar结合使用时,加载animation将显示在操作栏后面,使其几乎看不见。

有什么我可以做的,以显示它的顶部的操作栏?

在appcompat-v7库(v21.0.0)的Material Design版本中, SwipeRefreshLayout获取设置Progress View偏移量的方法。

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html#setProgressViewOffset(boolean,%20int,%20int)

public void setProgressViewOffset (boolean scale,int start,int end)

刷新指示器的开始和结束位置总是位于刷新内容的顶部附近。 这个位置是一个一致的位置,但可以根据是否存在工具栏或操作栏,在任一方向上进行调整。

参数

scale设置为true,如果没有设置出现进度微调器的z级的视图。

启动从进度微调器出现的视图顶部开始的像素偏移量。

结束在成功滑动手势后,进度微调器应该停止的距离此视图顶部的像素偏移量。

试试这个代码:

 int top_to_padding=100; swipe_refresh_layout.setProgressViewOffset(false, 0,top_to_padding); 

我希望它为你工作。

Vijay Rajput的答案适合我,但问题只在Kitkat或高,所以我包括:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { swipeLayout.setProgressViewOffset(false, 0,100); }

我目前遇到这个时,我升级我的依赖从appcompat 19.1.0到21.0.0,并没有更改代码。

这实际上是appcompat 21.0.0中SwipeRefreshLayout的一个已知问题。

在这里寻找解决方法: https : //code.google.com/p/android/issues/detail?id=77712

编辑

这是在appcompat-v7库的v21之前的最佳解决scheme。 如果您使用的是v21或更新版本,请检查已获批准的答案。 如果你正在使用appcompat-v7 <21 API,这仍然会帮助你。


您可以通过将SwipeRefreshLayout(及其依赖关系)复制到您的项目中,并更改进度栏的显示位置,添加顶部边距,来轻松解决这个问题。

为了让每个人都容易,我发布了一个实现了保证金的图书馆。 看看这个: https : //github.com/Naroh091/SwipeRefreshLayoutOverlay

希望能帮助到你!

而不是在SwipeRefreshLayout上设置paddingTop,设置layout_marginTop将使进度条可见:

 <android.support.v4.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="?android:attr/actionBarSize">