首页 > 移动平台 > 详细

【Android】修改菜单

时间:2015-04-06 21:56:23      阅读:200      评论:0      收藏:0      [点我收藏+]

Android Menu

菜单的回调时机

常用的与菜单相关的主要有三个回调:

//创建菜单的时候调用
public boolean onCreateOptionsMenu(Menu menu);

//显示菜单的时候调用
public boolean onPrepareOptionsMenu(Menu menu);

//选择菜单项的时候调用
public boolean onOptionsItemSelected(MenuItem item);

修改view

因此,如果我们想自定义菜单的显示效果,应该在创建菜单项的时候去干预创建过程,但是这个过程并没有向开发者开放。
这种情况下,我们要么重新自定义整个菜单视图,要么在系统创建号之后,再去修改每一个菜单项。

对于后面一中情况,我们可以在onCreateOptionsMenu中对每一项进行修改,主要方法就是通过ActionView来模拟:

MenuItem.setActionView(actionView);

或者

MenuItemCompat.setActionView(menuItem, actionView);//兼容包

比如,替换成Textview:

TextView action = new TextView(this);
action.setText(menuItem.getTitle());
action.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
        onOptionsItemSelected(menuItem);
    }
});
MenuItemCompat.setActionView(menuItem, action);

动态修改

有时候需要动态修改菜单,这个时候就需要分情况了,对于那些被收起来的菜单,可以在onPrepareOptionsMenu中进行动态增减,
因为onPrepareOptionsMenu会在每次菜单展示给用户的时候调用(比如点击ActionBar上的“更多”按钮)。

但是如果需要修改的菜单是一直展示在ActionBar或者Toolbar上面的话,可能触发修改菜单事件的时候,并不会涉及到onPrepareOptionsMenu,这个时候可以重新创建菜单,使用

Activity.invalidateOptionsMenu()

或者

ActionBarActivity.supportInvalidateOptionsMenu()//兼容包

来重新进入菜单流程。

演示图

技术分享

demo源码

android_menu

Android分享 Q群:315658668

【Android】修改菜单

原文:http://my.oschina.net/xesam/blog/396606

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!