【Android】修改菜单

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

时间: 04-05

【Android】修改菜单的相关文章

Android源码:Android切换菜单(Viewpager+Fragme)

Android切换菜单(Viewpager+Fragme)                                                                                                                                                                支持平台:Android    运行环境:Eclipse    开发语言:Java                    

android 上下文菜单详解

本文使用xml来创建上下文菜单 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/add" android:title="添加" android:orderInCategor

android修改布局后遇到 Incorrect line ending: found carriage return (\r) without corresponding newline (\n) 错误

遇到这个问题,只需要在eclipse中的Project选项菜单中选择clean,选中当前的项目.clean之后就不会报错了. 如图: Clean will discard all build problems and built states. The projects will be rebuilt from scratch. 大致意思就是Clean之后 ADT会清除之前编译产生的文件和保存的状态. 重新编译就好了. 总之遇到特别奇怪的bug时,不妨clean之后,重新编译一次,也许就解决了.

Android 修改Activity标题样式 actionBar

修改Activity的标题样式及ActionBar ,代码如下 <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> <!-- <item name=

android:修改PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色

1.修改PagerTabStrip中的背景颜色 我们在布局中直接设置background属性即可: <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="fill_parent" > <android.support.v4.view.PagerTabS

ZXing for Android 修改为竖屏模式

zxing github连接:https://github.com/zxing/zxing 以下为修改方法 Step 1: Add following lines to rotate data before buildLuminanceSource(..) in decode(byte[] data, int width, int height) DecodeHandler.java: byte[] rotatedData =newbyte[data.length];for(int y =0;

BottomBar之Android底部菜单

BottomBar之Android底部菜单 前言:开源项目BottomBar,实现Android底部菜单(常用菜单,BottomBar实现动画(上下式)+消息菜单,BottomBar+ViewPager+Fragment实现炫酷的底部导航效果) 效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 引入依赖: compile 'com.android.support:appcompat-v7:23.0.0' compile 'com.android.support:

android 修改EditText 中光标

在使用EditText的XML 文件中加入一个属性: android:textCursorDrawable="@null" android:textCursorDrawable   这个属性是用来控制光标颜色的, "@null"   是作用是让光标颜色和text color一样 android:textCursorDrawable 的用法可以查看android sdk 另外可以用一个图片来修改光标的颜色大小 android:textCursorDrawable=&q

android修改HOLO对话框风格

andriod中修改对话框的风格,可以通过设置theme来实现,部分元素需要通过Java代码来修改,下面以修改对话框的标题为例说明各步骤. 1.编写一个文本样式. DIALOG的标题是一个textview,在sytles.xml中,添加如下代码来设置你自己的文本样式: <style name="DialogWindowTitle"> <item name="android:textSize">22sp</item> <ite