本文转载自:http://blog.csdn.net/u010583599/article/details/51605572
Android菜单类型
菜单是为了增加更多的功能,不占用屏幕的空间。Android中菜单类型有三类,选项菜单(OptionMenu)、上下文菜单(ContextMenu)、子菜单(SubMenu),下面分别详细介绍这些菜单。
选项菜单(OptionMenu)
① 创建选项菜单:重写Activity的onCreateOptionMenu(Menu menu)方法。
-设置菜单项可用代码动态设置menu.add();
-还可以通过xml设置MenuInflater.inflate();
②设置菜单点击事件:onOptionsItemSelected();
③菜单关闭后发生的动作:onOptionMenuClosed(Menu menu);
④选项菜单显示之前会调用,可以在这里根据需要调整菜单:onPrepareOptionsMenu(Menu menu);
⑤打开后发生的动作。 onMenuOpened(int featureId,Menu menu);
方法一:通过xml设置菜单(res/menu/menu.xml)
- <menu xmlns:android=“http://schemas.android.com/apk/res/android”
- xmlns:tools=“http://schemas.android.com/tools”
- tools:context=“com.example.menudemo.MenuActivity” >
- <group android:id=“@+id/group1”>
- <item
- android:id=“@+id/action_menu1”
- android:orderInCategory=“300”
- android:menuCategory=“container”
- android:showAsAction=“never”
- android:title=“menu1”/>
- <item
- android:id=“@+id/action_menu2”
- android:orderInCategory=“200”
- android:menuCategory=“system”
- android:showAsAction=“never”
- android:title=“menu2”/>
- </group>
- <group android:id=“@+id/group2”>
- <item
- android:id=“@+id/action_menu3”
- android:orderInCategory=“100”
- android:menuCategory=“secondary”
- android:showAsAction=“never”
- android:title=“menu3”/>
- <item
- android:id=“@+id/action_menu4”
- android:orderInCategory=“400”
- android:menuCategory=“alternative”
- android:showAsAction=“never”
- android:title=“menu4”/>
- </group>
- </menu>
<item>标签的属性含义解释:
属性名 | 作用 |
menuCategory | 设置菜单项的种类。有四个可选值:Container、system、secondary、alternative。通过menuCategory属性可以控制菜单项的位置。 |
orderInCategory | 同类菜单的排列顺序,为整数值,值越大显示越靠前。 |
titleCondensed | 菜单项的短标题。当菜单文字太长时显示这个 |
alphabeticShortcut | 菜单项的字母快捷键。 |
showAsAction | Never:总是显示在移除菜单中。 Always:显示在ActionBar上。 ifRoom:如果actionBar空间足够就显示在ActionBar上。 withText:默认格式如果是含有文字和图表的话,只显示图标,使用ifRoom|withText可以显示图标和文字。 collapseActionView: <item android:id=”@+id/menu_search” android:showAsAction=”ifRoom|collapseActionView” android:actionViewClass=”android.widget.SearchView” /> android:showAsAction属性也可包含“collapseActionView”属性值,这个值是可选的,并且声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要占据操作栏的有效空间。 参考链接:http://blog.csdn.NET/think_soft/article/details/7370686 |
<group>标签的作用是可以进行整组操作,把一些具有相同操作的菜单放到一个组内。
在Activity里加载菜单
- @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, menu);
- return true;
- }
方法二:通过代码添加menu
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- //调用这个方法设置图标的可见性
- setIconVisible(menu);
- /*
- * add()方法的四个参数,依次是:
- * 1、组别,如果不分组的话就写Menu.NONE,
- * 2、Id,这个很重要,Android根据这个Id来确定不同的菜单
- * 3、顺序,那个菜单现在在前面由这个参数的大小决定,参数越小,显示的越前
- * 4、文本,菜单的显示文本
- */
- menu.add(Menu.NONE, Menu.FIRST + 1, 5, “删除”).setIcon(
- android.R.drawable.ic_menu_delete);
- // setIcon()方法设置菜单图标
- menu.add(Menu.NONE, Menu.FIRST + 2, 2, “保存”).setIcon(
- android.R.drawable.ic_menu_save);
- menu.add(Menu.NONE, Menu.FIRST + 3, 6, “帮助”).setIcon(
- android.R.drawable.ic_menu_help);
- menu.add(Menu.NONE, Menu.FIRST + 4, 1, “添加”).setIcon(
- android.R.drawable.ic_menu_add);
- menu.add(Menu.NONE, Menu.FIRST + 5, 4, “详细”).setIcon(
- android.R.drawable.ic_menu_info_details);
- menu.add(Menu.NONE, Menu.FIRST + 6, 3, “发送”).setIcon(
- android.R.drawable.ic_menu_send);
- return true;
- }
- //使用反射设置menu图标的可见性
- private void setIconVisible(Menu menu) {
- try {
- Class clazz = Class
- .forName(”com.android.internal.view.menu.MenuBuilder”);
- Method m = clazz.getDeclaredMethod(”setOptionalIconsVisible”,
- boolean.class);
- m.setAccessible(true);
- m.invoke(menu, true);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
菜单显示效果如下图:
选项菜单设置点击监听
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- Log.i(TAG, ”onOptionsItemSelected”);
- int id = item.getItemId();
- switch (id) {
- case Menu.FIRST+1:
- Toast.makeText(MenuActivity.this, “点击了删除按钮”, Toast.LENGTH_SHORT).show();
- break;
- default:
- break;
- }
- return super.onOptionsItemSelected(item);
- }
上下文菜单
当用户长时间按键不放时,弹出来的菜单称为上下文菜单。Windows中用鼠标右键弹出的菜单就是上下文菜单。
创建上下文菜单的步骤:
① 调用registerForContextMenu()方法,为视图注册上下文菜单。如textView tv
registerForcontextMenu(tv);
-
@Override -
protected void