ActionBar后面的SwipeRefreshLayout

时间:2014-06-25 16:10:10

标签: android swiperefreshlayout

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

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

6 个答案:

答案 0 :(得分:59)

在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 (boolean scale,int start,int end)

     

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

     

<强>参数

     

scale 如果没有高于z-order的视图,则设置为true,而不是将进度微调器设置为显示的位置。

     

start 此视图顶部应显示进度微调器的偏移量(以像素为单位)。

     

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

答案 1 :(得分:13)

试试这段代码:

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

我希望它适合你。

答案 2 :(得分:4)

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

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

答案 3 :(得分: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">

答案 4 :(得分:1)

编辑

这是appcompat-v7库v21之前的最佳解决方案。如果您使用的是v21或更新版本,请查看已批准的答案。如果你正在使用appcompat-v7&lt; 21 API这对你有帮助。


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

为了让每个人都轻松,我发布了一个带有保证金的图书馆。看看这个:https://github.com/Naroh091/SwipeRefreshLayoutOverlay

希望它有所帮助!

答案 5 :(得分:1)

当我将我的依赖项从appcompat 19.1.0升级到21.0.0并且没有更改代码时,我现在遇到过这种情况。

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

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