常用的与菜单相关的主要有三个回调:
1 | //创建菜单的时候调用 |
修改view
因此,如果我们想自定义菜单的显示效果,应该在创建菜单项的时候去干预创建过程,但是这个过程并没有向开发者开放。
这种情况下,我们要么重新自定义整个菜单视图,要么在系统创建号之后,再去修改每一个菜单项。
对于后面一中情况,我们可以在onCreateOptionsMenu中对每一项进行修改,主要方法就是通过ActionView来模拟:
1 | MenuItem.setActionView(actionView); |
比如,替换成Textview:
1 | TextView action = new TextView(this); |
动态修改
有时候需要动态修改菜单,这个时候就需要分情况了,对于那些被收起来的菜单,可以在onPrepareOptionsMenu中进行动态增减,
因为onPrepareOptionsMenu会在每次菜单展示给用户的时候调用(比如点击ActionBar上的“更多”按钮)。
但是如果需要修改的菜单是一直展示在ActionBar或者Toolbar上面的话,可能触发修改菜单事件的时候,并不会涉及到onPrepareOptionsMenu,这个时候可以重新创建菜单,使用
1 | Activity.invalidateOptionsMenu() |
来重新进入菜单流程。