14

我对 android 很陌生,我正在探索谷歌网站上的示例代码。我目前使用的代码是 SwipeRefreshLayout:http: //developer.android.com/samples/SwipeRefreshLayoutBasic/index.html

在代码中,我们看到 SwipeRefreshLayout 正在为一个列表视图执行,也就是说,如果你向下拖动列表视图,就会触发该方法并且列表视图会自行刷新。

<android.support.v4.widget.SwipeRefreshLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:id="@+id/swiperefresh"
      android:layout_width="match_parent"
      android:layout_height="match_parent">

    <ListView
          android:id="@android:id/list"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

</android.support.v4.widget.SwipeRefreshLayout>

令我困惑的是,当您将其向下拖动时,进度动画栏的代码中没有显示在列表视图顶部的布局。你以为 SwipeRefreshLayout 在你往下拉的时候会自动生成一个进度动画条,而不需要用户在 xml 中为它指定任何布局吗?

例如,如果想在进度动画条的两端添加 padding,以使刷新时动画不会触及屏幕的两端,该怎么做呢?

https://developer.android.com/reference/android/support/v4/widget/SwipeRefreshLayout.html并没有真正说明它。

4

2 回答 2

25

不能改变动画。

SwipeRefreshLayout你不能定制太多;我相信这是谷歌试图让开发者坚持通用模式的尝试。您可以设置动画的四种颜色,用 指定setColorScheme()

SwipeRefreshLayout注意在顶部为您显示其预定义的动画。这可能是在canChildScrollUp()返回 false 并且用户“下拉”时,或者当您设置setRefreshing(true). 用 关闭动画setRefreshing(false)。将您的逻辑放在onRefreshing()侦听器的方法中。如果canChildScrollUp()你把不是 a 的东西ListView放在你的SwipeRefreshLayout. 你应该很高兴从这里出发。

于 2014-06-07T17:27:47.333 回答
12

尽管您无法更改它,但您仍然可以隐藏它,然后在触发后显示您自己的 :-)

SwipeRefreshLayout swiperefresh = (SwipeRefreshLayout)root.findViewById(R.id.swiperefresh);
swiperefresh.setOnRefreshListener(this);
swiperefresh.setColorSchemeColors(0,0,0,0);
swiperefresh.setProgressBackgroundColor(android.R.color.transparent); 

笔记:

  • 在 Eclipse 中,您必须添加 @SuppressLint("ResourceAsColor") 来编译它。

  • 您仍然需要在适当的时间点调用 setRefreshing(false) ,否则 onRefresh 不会再次触发。

于 2014-10-20T05:14:25.537 回答