如何在 ActionBar 中添加按钮

如何在 ActionBar 中添加按钮,第1张

在以前版本的 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 事件,则用户点击该菜单是没响应的,这种行为刚好是应用需要的行为。

Toolbar是Android 5.0中引入的一个新控件。好比是ActionBar升级版,但是相比ActionBar,Toolbar变得更加自由,可以放到任何位置。

由于我们平常开发app要兼容5.0以下的手机,所以使用Toolbar必须引用appcompat-v7兼容包,Android studio新建的工程默认是引用了appcompat-v7。

使用Toolbar替代ActionBar,使用的主题必须是没有ActionBar的,否则会造成冲突。因此修改style.xml中主题样式,继承Theme.AppCompat.NoActionBar

这种情况一般发生在你想利用ActionBar现有的一些功能(比如能够显示菜单中的 *** 作项,响应菜单点击事件,使用ActionBarDrawerToggle等),但是又想获得比actionbar更多的控制权限。

那么当前Activity需要继承AppCompatActivity,调用setSupportActionBar方法传入Toolbar的实例对象。

这种情况当前Activity可以不继承AppCompatActivity。

以上步骤完成后,Toolbar就添加到了页面中。

Toolbar在ActionBar原有的设计基础上又将标题栏分为了多个区域,如下从Google找到的一张示例图所示:

大抵来说,配置常用的几个元素就如图中所示:

设置导航按钮,比如作为返回按钮。

在Toolbar当作ActionBar来使用的情况下:

注意setNavigationIcon需要放在 setSupportActionBar之后才会生效。

可以使用ActionBar原有方法来添加一个系统的返回按钮。

可以通过setNavigationOnClickListener设置其点击事件。

设置图标(图中写错了,应该是setLogo)

设置主标题。

在Toolbar当作ActionBar来使用的情况下:

setDisplayShowTitleEnabled需要设置为false,setTitle才能有效。

设置副标题

设置菜单的点击事件,如果Toolbar当作ActionBar来使用的话,还可以直接在onOptionsItemSelected(MenuItem item)中设置。

关于Toolbar的初步使用就这么多,在Toolbar当作ActionBar使用的情况下,能用ActionBar原有方法实现的功能尽量用其方法实现,不能实现的再考虑使用Toolbar的方法,举个例子,像菜单构建设置监听什么的,直接使用Activity提供的方法就好了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11555525.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存