在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

相关文章
|
安全
SFX的妙用——如何在不安装软件的情况下打开自定义格式文件?
【8月更文挑战第31天】SFX(自解压文件)能在无需安装特定软件的情况下打开自定义格式文件。通过将所需程序与资源打包进 SFX 文件,用户可轻松解压并运行文件。此方法需确定所需程序、创建 SFX 文件并分发给用户,同时需注意合法性、兼容性和安全性问题,以确保文件正常且安全地运行。这为用户提供了便捷的解决方案。
637 7
|
12月前
|
SQL 存储 缓存
阿里云EMR StarRocks X Paimon创建 Streaming Lakehouse
讲师焦明烨介绍了StarRocks的数据湖能力,如何使用阿里云EMR StarRocks构建基于Paimon的极速实时湖仓,StarRocks与Paimon的最新进展及未来规划。
463 59
|
11月前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
363 1
|
12月前
|
传感器 Java 测试技术
📖Java零基础-do-while循环语句的深入剖析
【10月更文挑战第5天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
325 1
|
12月前
|
缓存 安全 Linux
docker镜像管理问题
【10月更文挑战第3天】
225 1
|
12月前
|
机器学习/深度学习 前端开发 JavaScript
230+本图灵编程高清文字版无水印电子书合集【制作不易,点赞收藏❤️】
今日精选,200余本图灵出版的高质量编程电子书,覆盖编程、系统架构、算法及机器学习等热门领域,助你全面提升技术能力。无论你是初学者还是资深开发者,都能从中找到适合自己的学习资源,从《Python编程:从入门到实践》到《深度学习入门》,每一本书都将是你技术成长道路上的良师益友,帮助你在瞬息万变的技术浪潮中站稳脚跟,稳步前行。
429 2
|
机器学习/深度学习 安全 物联网
智能时代下的数据安全:挑战与对策
本文深入探讨了在快速发展的信息技术背景下,数据安全面临的新挑战及应对策略。文章首先分析了当前数据泄露和滥用的风险,随后提出了一系列针对性的技术和管理措施,旨在增强个人和企业的数据防护能力。通过案例分析,本文揭示了数据保护的最佳实践,并对未来数据安全技术的发展方向进行了展望。
|
存储 机器学习/深度学习 编解码
数字图像处理(二) 数字图像处理基础(下)
数字图像处理(二) 数字图像处理基础(下)
402 0
|
机器学习/深度学习 索引
深度学习基础:标量、向量、矩阵、张量
深度学习基础:标量、向量、矩阵、张量
1339 0
深度学习基础:标量、向量、矩阵、张量
|
机器学习/深度学习 数据采集 小程序
互联网智能3D导诊系统源码支持微信小程序、APP
互联网智能3D导诊系统源码支持微信小程序、APP
271 0