38

当 SwipeRefreshLayout 与覆盖模式的 ActionBar 结合使用时,加载动画会显示在 actionbar 的后面,使其几乎不可见。

我可以做些什么来在操作栏上显示它吗?

4

6 回答 6

68

在 appcompat-v7 库 (v21.0.0) 的 Material Design 版本中,SwipeRefreshLayout获取设置进度视图偏移的方法。

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

public void setProgressViewOffset(布尔值,int start,int end)

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

参数

如果没有比进度微调器设置显示的 z 顺序更高的视图,则设置为 true

start 距此视图顶部的偏移量(以像素为单位),进度微调器应出现在该处。

end 在成功滑动手势后进度微调器应该停止的距离此视图顶部的偏移量(以像素为单位)。

于 2014-10-21T19:28:02.307 回答
20

试试这个代码:

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

我希望它对你有用。

于 2015-03-28T09:28:00.893 回答
4

Vijay Rajput 的答案对我有用,但问题只出在 Kitkat 或 hight 上,所以我包括:

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

于 2015-04-26T13:02:57.347 回答
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">
于 2014-08-28T20:23:55.687 回答
1

编辑

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


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

为了方便每个人,我发布了一个实现了边距的库。看看这个:https ://github.com/Naroh091/SwipeRefreshLayoutOverlay

希望能帮助到你!

于 2014-07-05T18:34:51.863 回答
1

当我将依赖项从 appcompat 19.1.0 升级到 21.0.0 并且没有进行任何代码更改时,我目前遇到了这个问题。

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

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

于 2014-10-31T17:02:45.063 回答