天天看点

在ActionBar添加刷新Loading状态

应用场景:在界面内列表或其他部件下拉刷新时,actionbar 出现一个转圈的刷新标示动画。 

实现方式:可使用开源类库 refreshactionitem (https://github.com/manuelpeinado/refreshactionitem),refreshactionitem 还支持一些扩展功能,功能比较丰富;

如果只需要实现一个刷新和loading的效果,则可以使用另一种简便的实现方式:

1. 首先定义一个 menu xml 文件, share_public.xml:

[html] view

plaincopy

在ActionBar添加刷新Loading状态
在ActionBar添加刷新Loading状态

<?xml version="1.0" encoding="utf-8"?>  

<menu xmlns:android="http://schemas.android.com/apk/res/android" >  

    <item  

        android:id="@+id/refresh_loading"  

        android:icon="@color/transparent"  

        android:showasaction="always"  

        android:title="刷新"/>  

</menu>  

2. 然后创建一个代表刷新进度的自定义 progressbar 布局文件 actionbar_indeterminate_progress.xml:

在ActionBar添加刷新Loading状态
在ActionBar添加刷新Loading状态

<framelayout xmlns:android="http://schemas.android.com/apk/res/android"  

    android:layout_height="wrap_content"  

    android:layout_width="56dp"  

    android:minwidth="56dp">  

    <progressbar android:layout_width="32dp"  

        android:layout_height="32dp"  

        android:layout_gravity="center"  

        style="?indeterminateprogressstyle" />  

</framelayout>  

注意,为了显示美观,上面的 宽度和高度 不同的版本和屏幕可能需要设置不一样的值,可以在不同的 dimens.xml 中设置。

3. 在 activity 代码中,获取到该 menuitem 并根据刷新情况来设置 actionview:

[java] view

在ActionBar添加刷新Loading状态
在ActionBar添加刷新Loading状态

menuitem mprogressmenu;  

@override  

public boolean oncreateoptionsmenu(menu menu) {  

    getsupportmenuinflater().inflate(r.menu.share_public, menu);  

    mprogressmenu = menu.finditem(r.id.refresh_loading);  

    return true;  

}  

public void setloadingstate(boolean refreshing) {  

    if (mprogressmenu != null) {  

        if (refreshing) {  

            mprogressmenu  

                    .setactionview(r.layout.actionbar_indeterminate_progress);  

            mprogressmenu.setvisible(true);  

        } else {  

            mprogressmenu.setvisible(false);  

            mprogressmenu.setactionview(null);  

        }  

    }  

现在,根据您的刷新逻辑,只需要调用 setrefreshactionbuttonstate 函数就可以启用刷新动画了。

本项目不在 actionview 中处理 onclick 事件,用户点击该菜单是没响应的,采用此种方式,loading状态动画只会在刷新时进行,在刷新结束后隐藏。

注:本帖系在参考地址基础上改造,本项目使用了actionbarsherlock来兼容3.0以下的版本中的actionbar;

参考地址使用了appcompat作兼容,在处理添加actionview操作上略有不同。

参考地址read more: http://blog.chengyunfeng.com/?p=572

继续阅读