android中的菜单Menu

Menu是一个接口, 他有2个子接口, SubMenu和ContextMenu; 前者菜单常见于按home键就会出现 ,后者是一个上下文菜单, 一般点击某个条目会在手机屏幕中出现一个类似悬浮窗口的菜单

1.SubMenu的实现

总体来说它主要有2个方法--add()和addSubMenu()前者是往子菜单中添加菜单项; 后者是添加一个新的子菜单

案例:

public class MainActivity extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 向Menu中添加一个子菜单
        SubMenu subMenu1 = menu.addSubMenu(0, 1, 0, "添加");
        SubMenu subMenu2 = menu.addSubMenu(0, 2, 0, "修改");
        SubMenu subMenu3 = menu.addSubMenu(0, 3, 0, "查询");
        SubMenu subMenu4 = menu.addSubMenu(0, 4, 0, "删除");

        // 给子菜单添加菜单项
        subMenu1.add(0, 1, 0, "菜单项11");
        subMenu1.add(0, 1, 0, "菜单项12");
        subMenu1.add(0, 1, 0, "菜单项13");

        subMenu2.add(0, 2, 0, "菜单项21");
        subMenu2.add(0, 2, 0, "菜单项22");

        subMenu3.add(0, 3, 0, "菜单项33");

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 1:
            Toast.makeText(this, "执行添加", 0).show();
            break;
        case 2:
            Toast.makeText(this, "执行修改", 0).show();
            break;
        case 3:
            Toast.makeText(this, "执行查询", 0).show();
            break;
        case 4:
            Toast.makeText(this, "执行删除", 0).show();
            break;

        }
        return super.onOptionsItemSelected(item);
    }

}

对于add(int groupId,int itemId,int order, int titleRes);参数解释

groupid表示某个菜单项组,也就是这个菜单项位于哪个组中,itemId用于在回调函数标示一个菜单项,order显示顺序,title是一个标题; 对于addSubMenu()参数和这个类似

2.上下文菜单Contextmenu

public class MainActivity2 extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main2);

        String[] names = new String[] { "zhangsan", "lisi", "wangwu", "zhaoliu" };

        ListView lv = (ListView) findViewById(R.id.lv);

        lv.setAdapter(new ArrayAdapter<String>(this,
                android.R.layout.simple_expandable_list_item_1,
                names));
        
        //步骤1给listview注册上下午菜单
        registerForContextMenu(lv);
    }

    // 步骤2重写onCreateContextMenu创建上下文菜单
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.context_menu, menu);
    }

    // 步骤3在res/menu/创建context_menu.xml

    // 步骤4重写onContextItemSelected执行点击事件
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
                .getMenuInfo();
        switch (item.getItemId()) {
        default:
            return super.onContextItemSelected(item);
        }
    }

}

主布局文件很简单,就一个Listview,不在给出
context_menu.xml文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    
    <item android:id="@+id/update_name" android:title="更改姓名"/>
    <item android:id="@+id/update_delete" android:title="删除姓名"/>
</menu>

当长点击listview的一个条目时的效果图

原文地址:https://www.cnblogs.com/android-zcq/p/3141589.html