在网上关于Menu如何创建,点击事件的文章已经很多,所以想查询此功能的网友可以在google上面随便搜一下就有很多,但是今天我说的这个功能可能是个偏门,可能很少注意,也很少人需要,所以在网上找了很多,但是没有找到相关信息。所以在此记录下来,闲话少说,进入正题。

先简单说下menu:android 提供三种基本的menu类型:

Options Menu

这是一个菜单的基本元素。通过按menu的屏幕键才显示。有两种类型的menu菜单:

Icon Menu

通过按下menu键会出现这些可见按钮的集合。最大可以支持6个选项。只能显示为图标,并且菜单项只能为按钮,不能是选择框。

Expanded Menu

Icon menu有一个more选项,有一个选项集。只有当 Icon Menu 菜单被重写,并且有超过六个的选项时才会被显示。

ContextMenu

这个菜单会在你长时间按view时显示。

Submenu

这是一个子菜单,可以添加到 Options Menu 或 Context Menu 菜单的选项中,子菜单不支持嵌套使用。

大家知道,在创建menu的时候,一种比较好的方法是使用xml文件,使架构比较清晰,在这里使用Browser源代码里面的操作给大家演示一下

@Override    public boolean onCreateOptionsMenu(Menu menu) {    if(debug) Log.d(TAG, "onCreateOptionsMenu");        super.onCreateOptionsMenu(menu);        MenuInflater inflater = getMenuInflater();        inflater.inflate(R.menu.browser, menu);        mMenu = menu;        updateInLoadMenuItems();        return true;    }
在上面的代码里面,很简单的生成了一个比较复杂的menu,其中R.menu.browser的文件代码如下:

<?xml version="1.0" encoding="utf-8"?><menu xmlns:android="http://schemas.android.com/apk/res/android">    <group android:id="@+id/MAIN_MENU">        <item android:id="@+id/new_tab_menu_id"            android:title="@string/new_tab"            android:icon="@drawable/ic_menu_new_window"            android:alphabeticShortcut="n" />        <item android:id="@+id/exit_menu_id"            android:title="@string/exit_dot"            android:alphabeticShortcut="x"            android:icon="@drawable/ic_btn_close_panel"/>        <item android:id="@+id/bookmarks_menu_id"            android:title="@string/bookmarks"            android:alphabeticShortcut="b"            android:icon="@drawable/ic_menu_bookmarks"            />        <item android:id="@+id/active_tabs_menu_id"            android:title="@string/active_tabs"            android:icon="@drawable/ic_menu_windows"            android:alphabeticShortcut="t" />        <item android:id="@+id/stop_reload_menu_id"            android:alphabeticShortcut="r" />        <item android:id="@+id/forward_menu_id"            android:title="@string/forward"            android:alphabeticShortcut="k"            android:icon="@*android:drawable/ic_menu_forward" />        <item android:id="@+id/add_bookmark_menu_id"            android:title="@string/save_to_bookmarks"            android:icon="@drawable/ic_menu_add_bookmark"            android:alphabeticShortcut="a" />        <item android:id="@+id/find_menu_id"            android:title="@string/find_dot"            android:alphabeticShortcut="f" />        <item android:id="@+id/select_text_id"            android:title="@string/select_dot"            android:alphabeticShortcut="e" />        <item android:id="@+id/page_info_menu_id"            android:title="@string/page_info"            android:alphabeticShortcut="g" />        <item android:id="@+id/share_page_menu_id"            android:title="@string/share_page"            android:alphabeticShortcut="s" />        <item android:id="@+id/view_downloads_menu_id"            android:title="@string/menu_view_download"            android:alphabeticShortcut="d" />        <item android:id="@+id/preferences_menu_id"            android:title="@string/menu_preferences"            android:alphabeticShortcut="p" />        <!-- followings are debug only -->        <item android:id="@+id/dump_nav_menu_id"            android:title="@string/dump_nav"            android:visible="false" />        <item android:id="@+id/dump_counters_menu_id"            android:title="@string/dump_counters"            android:visible="false" />    </group>    <group android:id="@+id/MAIN_SHORTCUT_MENU" android:visible="false">        <item android:id="@+id/homepage_menu_id"            android:alphabeticShortcut=" " />        <item android:id="@+id/classic_history_menu_id"            android:alphabeticShortcut="h" />        <item android:id="@+id/zoom_in_menu_id"            android:alphabeticShortcut="i" />        <item android:id="@+id/zoom_out_menu_id"            android:alphabeticShortcut="o" />        <item android:id="@+id/window_one_menu_id"            android:alphabeticShortcut="1" />        <item android:id="@+id/window_two_menu_id"            android:alphabeticShortcut="2" />        <item android:id="@+id/window_three_menu_id"            android:alphabeticShortcut="3" />        <item android:id="@+id/window_four_menu_id"            android:alphabeticShortcut="4" />        <item android:id="@+id/window_five_menu_id"            android:alphabeticShortcut="5" />        <item android:id="@+id/window_six_menu_id"            android:alphabeticShortcut="6" />        <item android:id="@+id/window_seven_menu_id"            android:alphabeticShortcut="7" />        <item android:id="@+id/window_eight_menu_id"            android:alphabeticShortcut="8" />        <item android:id="@+id/back_menu_id"            android:title="@string/back"            android:drawable="@*android:drawable/ic_menu_back"            android:alphabeticShortcut="j" />        <item android:id="@+id/goto_menu_id"            android:title="@string/goto_dot"            android:alphabeticShortcut="l"            android:icon="@android:drawable/ic_menu_search"/>        <item android:id="@+id/close_menu_id"            android:icon="@drawable/ic_btn_close_panel"            android:title="@string/tab_picker_remove_tab"            android:alphabeticShortcut="w" />    </group>    <!-- these items are toggled in and out of @+id/stop_reload_menu_id -->    <item android:id="@+id/stop_menu_id"        android:title="@string/stop"        android:icon="@*android:drawable/ic_menu_stop"        android:visible="false" />    <item android:id="@+id/reload_menu_id"        android:title="@string/reload"        android:icon="@*android:drawable/ic_menu_refresh"        android:visible="false" /></menu> 

这样,就生成了,如下图所示的菜单,在menuitem中,有android:orderInCategory这个属性:orderInCategory表明摆放的顺序,不一定从0还是计算,但必须大于等于0,数值小的位于前。

android Menu菜单操作(偏门--监听 more 操作)_第1张图片 我们有很多菜单选项,但是在这里最多只能显示6个,其他的我们只能在more里查找。

但是如果我们想监听More的点击方法,想在点击more(跟多)的时候做一些操作,在 onOptionsItemSelected(MenuItem item)方法里面发现无解。我们可以复写下面的方法。

@Override    public boolean onMenuOpened(int featureId, Menu menu) {    if(debug) Log.d(TAG, "onMenuOpened");        if (Window.FEATURE_OPTIONS_PANEL == featureId) {            if (mOptionsMenuOpen) {                if (mConfigChanged) {                    // We do not need to make any changes to the state of the                    // title bar, since the only thing that happened was a                    // change in orientation                    mConfigChanged = false;                } else {                    if (mIconView) {                        // Switching the menu to expanded view, so hide the                        // title bar.                        mIconView = false;                    } else {                        // Switching the menu back to icon view, so show the                        // title bar once again.                         mIconView = true;                    }                }            } else {                // The options menu is closed, so open it, and show the title                showFakeTitleBar();                mOptionsMenuOpen = true;                mConfigChanged = false;                mIconView = true;            }        }        return true;    }

这样,就可以在onMenuOpened方法里面进行你想要的操作。

更多相关文章

  1. Android设计元素-操作栏
  2. Android 用户界面---菜单(Menus 一)
  3. ANDROID JNI之JAVA域与c域的互操作
  4. java for android sqlite数据的操作:说实话,我用了ADO.NET的思想,自
  5. Android同步方法中异步操作获取返回值。
  6. Android 侧滑菜单的简单实现(SlidingMenu)
  7. Android中Calendar与Date的区别以及消除时区对日期操作影响的方
  8. Android操作SQLite数据库(增、删、改、查、分页等)及ListView显

随机推荐

  1. 优化SQL Server的内存占用之执行缓存
  2. SQLServer 跨库查询实现方法
  3. sqlserver 2000中创建用户的图文方法
  4. 数据库中聚簇索引与非聚簇索引的区别[图
  5. SQL SERVER 与ACCESS、EXCEL的数据转换方
  6. SQLServer 2000 升级到 SQLServer 2008
  7. 只有mdf文件的数据库附加失败的修复方法
  8. sqlserver 锁表语句分享
  9. 某年第一周开始日期实现方法
  10. 在sql Server自定义一个用户定义星期函数