Toolbar和Actionbar需要注意的一些问题

来源:互联网 发布:单片机简易电子琴c语言 编辑:程序博客网 时间:2024/04/29 19:36

我们都知道Toolbar是用来代替Actionbar的,但是有些问题需要注意一下

不想显示Actionbar有两种方式,第一种是将主题设置成NoActionbar,第二种是在代码中将其隐藏,这两种方式在使用Toolbar时是有所不同的

首先说第一种。将主题设置成NoActionbar时,页面是没有Actionbar的,所以即使我们重写了onCreateOptionsMenu()方法,也是不会执行的。这是,我们将Toolbar写到布局文件中代替Actionbar,如果不进行setSupportActionBar(toolbar);的设置,onCreateOptionsMenu()方法也不会执行。因此可以得出结论,如果希望执行onCreateOptionsMenu()的方法,不管是那种bar,必须存在。

    onOptionsItemSelected()方法也会响应item的点击事件,效果相当于toolbar.setOnMenuItemClickListener,两者都有的话,后者会把前者屏蔽掉。同理,如果不进行setSupportActionBar(toolbar);的设置,onCreateOptionsMenu()也不会响应,但是不影响toolbar.setOnMenuItemClickListener。

    可以这样理解,当我们设置了setSupportActionBar(toolbar);后,Toolbar就接管了Actionbar的功能,我们可以按照Actionbar的方式,在onCreateOptionsMenu()中inflate菜单:getMenuInflater().inflate(R.menu.toolbarmeni,menu),在onOptionsItemSelected()中响应点击事件,也可以用自己的方法;如果不想设置,就只能用自己的方式inflate菜单和设置点击事件。


然后是第二种,用getSupportActionBar().hide();将Actionbar隐藏掉。

    此时Actionbar还是存在的,只是被隐藏了,如果我们设置setSupportActionBar(toolbar);时会发现项目崩掉了,因为已经有了一个bar,再设置一个就会出错。如果不隐藏,同时又使用了toolbar,运行会发现有两个bar。

    此时,上文提到的两个重写方法肯定会执行,点击事件响应的是Actionbar,因为Actionbar还没有退位,Toolba也没法设置进来。所以如果要使用Toolbar,就只能是使用Toolbar自己的各种方法了。

原创粉丝点击