actionBar和Toolbar中如何动态隐藏和修改menu上的菜单
来源:互联网 发布:300271 华宇软件 编辑:程序博客网 时间:2024/05/16 08:39
actionBar大家都应该很熟了,非常好用的东西,如果不是很熟,可以看一下http://blog.csdn.net/guolin_blog/article/details/18234477,里面介绍的相当详细,而Toolbar是在5.0上出现的,也非常好用,而且它向下支持到2.2基本上现在的手机都可以用,说一点,知乎的页面,应该就是用它做的。
这两种控件,都有一个Menu的功能,这里不多介绍,网上都有,这里我要说的是如何动态的修改Menu上面的菜单,这里我的应用比较简单,就是显示和隐藏其中的一个菜单,大家看一下,下面的四个图:
请大家不要注意细节,我们只是看一下功能,前两个页面是 当前fragment为主页面的,后两个是fragment为发现的,这里大家会发现,为“发现”的比“首页”多了一个菜单在Menu当中,这个怎么实现的呢。
我们都知道,我们在建立actionbar或是toolbar的时候,都会默认的实现两个方法,分别是onCreateOptionsMenu和onOptionsItemSelected,这两个方法,前面的是建立菜单,后面的对选中的菜单进行操作。onCreateOptionsMenu这个只在页面加载的时候,运行一次,其后就不在运行了,也就是说它只一次加载完之后,就不会再动了,所以想改变Menu在这里是不可能的,还好的android提供了一个方法叫onPrepareOptionsMenu,它的功能是在每次点击一个Menu的时候,它就改变一次,所以你想要改变Menu的值,就得在这里运行。代码如下:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { Intent intent = new Intent(); switch (item.getItemId()) { case R.id.main_toolbar_search: Toast.makeText(this,"main_toolbar_search",Toast.LENGTH_LONG).show(); break; case R.id.main_toolbar_notify: Toast.makeText(this,"main_toolbar_notify",Toast.LENGTH_LONG).show(); break; case R.id.main_toolbar_about: intent.setClass(this, AboutActivity.class); break; case R.id.main_toolbar_register: Toast.makeText(this,"main_toolbar_register",Toast.LENGTH_LONG).show(); break; case R.id.main_toolbar_shuffle: Toast.makeText(this,"main_toolbar_shuffle",Toast.LENGTH_LONG).show(); break; } startActivity(intent); //切换动画一定要放在startActivity后面,并且一定要先进后出 overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left); return super.onOptionsItemSelected(item); } @Override public boolean onPrepareOptionsMenu(Menu menu) { Log.e("isMenuShuffle",isMenuShuffle + ""); if(isMenuShuffle) { menu.findItem(R.id.main_toolbar_shuffle).setVisible(true); }else { menu.findItem(R.id.main_toolbar_shuffle).setVisible(false); } return super.onPrepareOptionsMenu(menu); }
这里呢,我使用的是切换fragment的方法,来变化页面的。写到这里,我们运行一下,会发现,根本没有任何变化,因为isMenuShuffle在初始的时候设置成了false可是点击事件的时候,我们修改过啊。可是却没有运行onPrepareOptionsMenu这个方法,为什么?因为这个方法,是在点击Menu上的菜单,才会变,这怎么办,android给我们提供了一个方法,
在你点击切换fragment的事件之后。加上
actionBar:
this.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL); toolBar:<pre name="code" class="java">invalidateOptionsMenu();
OK,再次运行,就会有效果了
- actionBar和Toolbar中如何动态隐藏和修改menu上的菜单
- Android动态修改ToolBar的Menu菜单
- ActionBar和menu菜单
- 控制QT中MainWindow上Menu和ToolBar的上下文菜单Action列表
- toolbar上menu菜单的显示与隐藏
- 动态修改actionbar的Menu菜单中的显示内容
- 物理Menu 呼出 ActionBar中隐藏菜单的实现方式
- Toolbar中menu菜单文字颜色的修改
- Toolbar中menu菜单文字颜色的修改
- ToolBar 如何修改菜单字体和颜色
- Android 中菜单(Menu)键和ActionBar
- 动态改变actionbar的menu菜单MenuItem
- j2se菜单menu和工具条toolbar的简单使用例子
- 修改Toolbar上menu的字体大小
- 修改ToolBar上menu字体的大小
- 动态改变actionbar上menu的图标
- 动态切换ActionBar上的Menu图标
- 【Android开发】 物理Menu 呼出 ActionBar中隐藏菜单的实现方式
- 那些年我们追过的网络库(PartI)---(转载)
- VMware workstation退出全屏
- odoo/openerp开发字段解析(旧API)
- Expression Add Operators
- SAT写作练习中需要注意哪些【zhasite】
- actionBar和Toolbar中如何动态隐藏和修改menu上的菜单
- 提交App Store ITMS-90474 iPad Multitasking support requires these orientations。ITMS-90032,ITMS-90475
- 弹出窗口的两种实现方式 PopupWindow 和 Activity
- linux下创建shell脚本
- oracle----sqlldr用法
- mysql修改表、字段、库的字符集
- 使用Three.js + Blender构建在浏览器端显示的3D模型(1)
- Codeforces Round #322 B Luxurious Houses
- Mysql ——1045-Access denied for user 'root'@'localhost'(using password:YES)