如何在 ActionBar 中添加按钮

 我来答
杜爷1号
2018-08-01 · 知道合伙人软件行家
杜爷1号
知道合伙人软件行家
采纳数:4973 获赞数:9186
毕业于福建农林大学,本科学士学位。从事IT行业3年,曾参与过多个大型项目的需求调研、软件研发。

向TA提问 私信TA
展开全部
  在以前版本的 Gmail 应用中,ActionBar 上有个刷新菜单,点击一下刷新菜单变成一个转圈的刷新标示动画图片。 之前实现该功能的时候都是使用一个类库 RefreshActionItem 来实现的。RefreshActionItem 还支持一些扩展功能,功能比较丰富。
今天无意中又发现一个简单的实现方式。如果您只需要一个刷新的效果,则可以考虑这种方法, 实现方式如下:
1. 首先定义一个 Menu xml 文件:
2. 然后创建一个代表刷新进度的自定义 ProgressBar 布局文件
注意,为了显示美观,上面的 宽度和高度 不同的版本和屏幕可能需要设置不一样的值,可以在不同的 dimens.xml 中设置。
3. 在 Activity 代码中,获取到该 MenuItem 并根据刷新情况来设置 ActionView:
这里为了兼容 AppCompat (android 3.0 之前的版本)用了 MenuItemCompat 来设置 ActionView。
现在,根据您的刷新逻辑,只需要调用 setRefreshActionButtonState 函数就可以启用刷新动画了。
这种方式,值得一提的是, 如果你设置了 ActionView,则就是一个自定义 ActionItem,如果在 ActionView 中你不处理 OnClick 事件,则用户点击该菜单是没响应的,这种行为刚好是应用需要的行为。
孟高冷
2015-06-17 · TA获得超过6417个赞
知道小有建树答主
回答量:806
采纳率:18%
帮助的人:256万
展开全部
在以前版本的 Gmail 应用中,ActionBar 上有个刷新菜单,点击一下刷新菜单变成一个转圈的刷新标示动画图片。 之前实现该功能的时候都是使用一个类库 RefreshActionItem 来实现的。RefreshActionItem 还支持一些扩展功能,功能比较丰富。
今天无意中又发现一个简单的实现方式。如果您只需要一个刷新的效果,则可以考虑这种方法, 实现方式如下:
1. 首先定义一个 Menu xml 文件:
2. 然后创建一个代表刷新进度的自定义 ProgressBar 布局文件
注意,为了显示美观,上面的 宽度和高度 不同的版本和屏幕可能需要设置不一样的值,可以在不同的 dimens.xml 中设置。
3. 在 Activity 代码中,获取到该 MenuItem 并根据刷新情况来设置 ActionView:
这里为了兼容 AppCompat (android 3.0 之前的版本)用了 MenuItemCompat 来设置 ActionView。
现在,根据您的刷新逻辑,只需要调用 setRefreshActionButtonState 函数就可以启用刷新动画了。
这种方式,值得一提的是, 如果你设置了 ActionView,则就是一个自定义 ActionItem,如果在 ActionView 中你不处理 OnClick 事件,则用户点击该菜单是没响应的,这种行为刚好是应用需要的行为。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
可以叫我表哥
2015-01-17 · 知道合伙人数码行家
可以叫我表哥
知道合伙人数码行家
采纳数:25897 获赞数:1464984
2010年毕业于北京化工大学北方学院计算机科学与技术专业毕业,学士学位,工程电子技术行业4年从业经验。

向TA提问 私信TA
展开全部
  在以前版本的 Gmail 应用中,ActionBar 上有个刷新菜单,点击一下刷新菜单变成一个转圈的刷新标示动画图片。 之前实现该功能的时候都是使用一个类库 RefreshActionItem 来实现的。RefreshActionItem 还支持一些扩展功能,功能比较丰富。
  今天无意中又发现一个简单的实现方式。如果您只需要一个刷新的效果,则可以考虑这种方法, 实现方式如下:
  1. 首先定义一个 Menu xml 文件:
  
  <?xml version="1.0" encoding="utf-8"?>
  <menu xmlns:android="http://schemas.android.com/apk/res/android" >
  
  <item
  android:id="@id/menu_refresh"
  android:icon="@drawable/icon_refresh"
  android:orderInCategory="100"
  android:showAsAction="always"
  android:title="@string/action_refresh"/>
  
  </menu>
  

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

  <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:
  
  private Menu mOptionsMenu;
  
  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
  mOptionsMenu = menu;
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main_content, menu);
  return true;
  }
  
  public void setRefreshActionButtonState(boolean refreshing) {
  if (mOptionsMenu == null) {
  return;
  }
  
  final MenuItem refreshItem = mOptionsMenu.findItem(R.id.menu_refresh);
  if (refreshItem != null) {
  if (refreshing) {
  MenuItemCompat.setActionView(refreshItem, R.layout.actionbar_indeterminate_progress);
  } else {
  MenuItemCompat.setActionView(refreshItem, null);
  }
  }
  }
  

  这里为了兼容 AppCompat (android 3.0 之前的版本)用了 MenuItemCompat 来设置 ActionView。
  现在,根据您的刷新逻辑,只需要调用 setRefreshActionButtonState 函数就可以启用刷新动画了。
  这种方式,值得一提的是, 如果你设置了 ActionView,则就是一个自定义 ActionItem,如果在 ActionView 中你不处理 OnClick 事件,则用户点击该菜单是没响应的,这种行为刚好是应用需要的行为。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式