SwipeRefreshLayout在ActionBar后面

38
当使用SwipeRefreshLayout与覆盖模式ActionBar结合使用时,加载动画将显示在ActionBar后面,几乎看不见。有什么办法可以使其显示在ActionBar顶部吗?

我有同样的问题,无法找到一种方法将加载器显示在正确的位置。 - Mario Lenci
6个回答

68
在 Material Design 版本的 appcompat-v7 库(v21.0.0)中,SwipeRefreshLayout 增加了一个设置进度视图偏移量的方法。 https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html#setProgressViewOffset(boolean,%20int,%20int) 刷新指示器的起始和静止位置总是位于刷新内容顶部附近。这个位置是一个一致的位置,但可以根据是否有工具栏或操作栏而向任何方向调整。 参数 scale:如果没有高于进度旋转器所在位置的视图,则设置为 true。 start:进度旋转器应该出现的像素偏移量,相对于此视图的顶部。 end:在成功滑动手势之后,进度旋转器应该停止的像素偏移量,相对于此视图的顶部。

我已经导入了新的库,它运行良好(我可以看到新的swiperefreshanimation),但我需要将其向下移动。使用这种方法,我得到了“setProgressViewOffset(boolean, int, int)方法在SwipeRefreshLayout类型中未定义”的错误。请参见我的问题:http://stackoverflow.com/questions/26713832/setprogressviewoffsetboolean-int-int-is-undefined-for-the-type-swiperefreshl - Jonas Borggren

20

尝试这段代码:

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

我希望这对你有用。


4

Vijay Rajput的答案对我有用,但问题只存在于Kitkat或更高版本,因此我添加了以下内容:

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


2

不要在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">

3
是的,但是列表必须能够在操作栏下滚动,以使动画效果好看(我使用覆盖模式的Actionbar;操作栏是半透明的)。列表必须是SwipeFreshLayout的直接子项,因此这样不起作用。 - Frank

1

我最近在将我的依赖从appcompat 19.1.0升级到21.0.0时遇到了这个问题,而没有进行任何代码更改。

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

在此处查看解决方法: https://code.google.com/p/android/issues/detail?id=77712


1

编辑

在v21版本之前的appcompat-v7库中,这是最佳解决方案。如果您使用的是v21或更新版本,请查看批准的答案。如果您正在使用appcompat-v7 < 21 API,则仍将对您有所帮助。


你可以通过将 SwipeRefreshLayout(和其依赖项)复制到您的项目中,并更改进度条的显示位置,添加顶部边距来轻松解决此问题。
为了方便所有人,我发布了一个已实现边距的库。请看这里:https://github.com/Naroh091/SwipeRefreshLayoutOverlay 希望能帮到您!

5
很遗憾,这个解决方案涉及复制SwipeRefreshLayout类的全部代码。 - Frank
2
我们需要有人在 Google 上为此创建一个方法。讨厌不得不离开官方代码。 - John Shelley
链接已失效。 - string.Empty
@NicolasTyler 谢谢你的提醒,我已经更新了答案。 - Naroh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接