在网上关于Menu如何创建,点击事件的文章已经很多,所以想查询此功能的网友可以在google上面随便搜一下就有很多,但是今天我说的这个功能可能是个偏门,可能很少注意,也很少人需要,所以在网上找了很多,但是没有找到相关信息。所以在此记录下来,闲话少说,进入正题。
先简单说下menu:android 提供三种基本的menu类型:
这是一个菜单的基本元素。通过按menu的屏幕键才显示。有两种类型的menu菜单:
通过按下menu键会出现这些可见按钮的集合。最大可以支持6个选项。只能显示为图标,并且菜单项只能为按钮,不能是选择框。
Icon menu有一个more选项,有一个选项集。只有当 Icon Menu 菜单被重写,并且有超过六个的选项时才会被显示。
这个菜单会在你长时间按view时显示。
这是一个子菜单,可以添加到 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>
我们有很多菜单选项,但是在这里最多只能显示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; }