在ActionBar添加刷新Loading状态

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

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

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

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

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <menu xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <item  
  5.         android:id="@+id/refresh_loading"  
  6.         android:icon="@color/transparent"  
  7.         android:showAsAction="always"  
  8.         android:title="刷新"/>  
  9.   
  10. </menu>  


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

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     android:layout_height="wrap_content"  
  3.     android:layout_width="56dp"  
  4.     android:minWidth="56dp">  
  5.    
  6.     <ProgressBar android:layout_width="32dp"  
  7.         android:layout_height="32dp"  
  8.         android:layout_gravity="center"  
  9.         style="?indeterminateProgressStyle" />  
  10. </FrameLayout>  

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


3. 在 Activity 代码中,获取到该 MenuItem 并根据刷新情况来设置 ActionView:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. MenuItem mProgressMenu;  
  2.   
  3. @Override  
  4. public boolean onCreateOptionsMenu(Menu menu) {  
  5.     getSupportMenuInflater().inflate(R.menu.share_public, menu);  
  6.     mProgressMenu = menu.findItem(R.id.refresh_loading);  
  7.     return true;  
  8. }  
  9.   
  10. public void setLoadingState(boolean refreshing) {  
  11.     if (mProgressMenu != null) {  
  12.         if (refreshing) {  
  13.             mProgressMenu  
  14.                     .setActionView(R.layout.actionbar_indeterminate_progress);  
  15.             mProgressMenu.setVisible(true);  
  16.         } else {  
  17.             mProgressMenu.setVisible(false);  
  18.             mProgressMenu.setActionView(null);  
  19.         }  
  20.     }  
  21. }  
现在,根据您的刷新逻辑,只需要调用 setRefreshActionButtonState 函数就可以启用刷新动画了。


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


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

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值