Android Menu实例

本文详细介绍了Android应用中菜单系统的创建及使用方法,包括如何通过代码动态添加Activity菜单、子菜单和上下文菜单,并实现了菜单项点击事件的监听处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.gem.android.menu;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener,OnMenuItemClickListener{
    /** Called when the activity is first created. */
    private Menu menu;
    //Menu.FIRST的值是1
    private int menuItemId = Menu.FIRST;
    private Button button;
    private EditText editText;
    private TextView textView;

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onCreate(android.os.Bundle)
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button = (Button) findViewById(R.id.btnAddMenu);
        button.setOnClickListener(this);
        editText = (EditText) findViewById(R.id.edittext);
        textView = (TextView) findViewById(R.id.textview);
        // 注册上下文菜单
        this.registerForContextMenu(button);
        this.registerForContextMenu(editText);
        this.registerForContextMenu(textView);
    }

    /*
     * 向Activity菜单添加10个菜单项,菜单项的id从10开始
     */
    @Override
    public void onClick(View view) {
        //只有单击手机上的“Menu”按钮,onCreateOptionsMenu方法才会被调用,         
        //因此,如果不按“Menu”按钮,Main类的menu变量的值是null  
        if (menu == null)
            return;
         // 向Activity菜单添加10个菜单项,菜单项的id从10开始
        for (int i = 10; i < 20; i++) {
            int id = menuItemId++;
            menu.add(1, id, id, "菜单" + i);
        }
    }

    private void showDialog(String message) {
        new AlertDialog.Builder(this).setMessage("您单击了【" + message + "】菜单项.").show();
    }

    /*
     * 单击Activity菜单、子菜单、上下文菜单的菜单项时调用该方法
     */
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        Log.d("onMenuItemClick", "true");
        this.showDialog(item.getTitle().toString());
        return false;
    }

    /*
     * 向父菜单添加3个菜单项
     */
    private void addMenu(Menu menu) {

        //添加项
        MenuItem addMenuItem = menu.add(1, menuItemId++, 1, "添加");
        //将AddActivity与“添加”菜单项进行关联
        addMenuItem.setIntent(new Intent(this, AddActivity.class));
        
        //添加删除项
        MenuItem deleteMenuItem = menu.add(1, menuItemId++, 2, "删除");
        //设置删除按钮的背景图
        deleteMenuItem.setIcon(R.drawable.delete);
        deleteMenuItem.setOnMenuItemClickListener(this);
        
        MenuItem menuItem1 = menu.add(1, menuItemId++, 3, "菜单1");
        menuItem1.setOnMenuItemClickListener(this);
        
        MenuItem menuItem2 = menu.add(1, menuItemId++, 4, "菜单2");

    }

    private void addSubMenu(Menu menu) {
        // 添加子菜单
        SubMenu fileSubMenu = menu.addSubMenu(1, menuItemId++, 5, "文件");
        //设置在选项菜单中显示的图像
        fileSubMenu.setIcon(R.drawable.file);
        //设置子菜单头的图像
        fileSubMenu.setHeaderIcon(R.drawable.headerfile);

        // 子菜单不支持图像
        MenuItem newMenuItem = fileSubMenu.add(1, menuItemId++, 1, "新建");
        //将第1个子菜单项设置成复选框类型
        newMenuItem.setCheckable(true);
        //选中第1个子菜单项中的复选框
        newMenuItem.setChecked(true);
        MenuItem openMenuItem = fileSubMenu.add(2, menuItemId++, 2, "打开");
        MenuItem exitMenuItem = fileSubMenu.add(2, menuItemId++, 3, "退出");
        //将第3个子菜单项的选项按钮设为选中状态
        exitMenuItem.setChecked(true);
        //将后两个子菜单项设置成选项按钮类型
        fileSubMenu.setGroupCheckable(2, true, true);

    }

    /*
     * 单击Menu按钮时调用该方法来建立Activity菜单
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        this.menu = menu;
        this.addMenu(menu);
        this.addSubMenu(menu);
        return super.onCreateOptionsMenu(menu);
    }

    /*
     * 在Activity菜单显示前调用该方法,可以在这个方法中修改指定的菜单项
     */
    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        Log.d("onPrepareOptionsMenu", "true");
        return super.onPrepareOptionsMenu(menu);
    }

    /*
     * 当上下文菜单关闭时调用该方法(non-Javadoc)
     * @see android.app.Activity#onContextMenuClosed(android.view.Menu)
     */
    @Override
    public void onContextMenuClosed(Menu menu) {
        Log.d("onContextMenuClosed", "true");
        super.onContextMenuClosed(menu);
    }

    /*
     * 当Activity菜单显示时调用该方法,这个方法在 onPrepareOptionsMenu之后被调用(non-Javadoc)
     * @see android.app.Activity#onMenuOpened(int, android.view.Menu)
     */
    @Override
    public boolean onMenuOpened(int featureId, Menu menu) {
        Log.d("onMenuOpened", "true");
        return super.onMenuOpened(featureId, menu);
    }

    /*
     * 当Activity菜单被关闭时调用该方法(non-Javadoc)
     * @see android.app.Activity#onOptionsMenuClosed(android.view.Menu)
     */
    @Override
    public void onOptionsMenuClosed(Menu menu) {
        Log.d("onOptionsMenuClosed", "true");
        super.onOptionsMenuClosed(menu);
    }

    /*
     * (non-Javadoc)
     * @see android.app.Activity#onMenuItemSelected(int, android.view.MenuItem)
     */
    @Override
    public boolean onMenuItemSelected(int featureId, MenuItem item) {
        super.onMenuItemSelected(featureId, item);
        Log.d("onMenuItemSelected:itemId=", String.valueOf(item.getItemId()));
        if ("菜单1".equals(item.getTitle()))
            this.showDialog("<" + item.getTitle().toString() + ">");
        else if ("菜单2".equals(item.getTitle()))
            showDialog("<" + item.getTitle().toString() + ">");
        return false;
    }

    /*
     * 单击每一个Activity菜单项时调用该方法(non-Javadoc)
     * @see android.app.Activity#onOptionsItemSelected(android.view.MenuItem)
     */
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Log.d("onOptionsItemSelected:itemid=", String.valueOf(item.getItemId()));
        return true;
    }

    /*
     * 单击上下文菜单的某个菜单项时调用该方法(non-Javadoc)
     * @see android.app.Activity#onContextItemSelected(android.view.MenuItem)
     */
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        Log.d("onContextItemSelected:itemid=", String.valueOf(item.getItemId()));
        if (!"子菜单".equals(item.getTitle().toString())){
            this.showDialog("*" + item.getTitle().toString() + "*");
        }
        return super.onContextItemSelected(item);
    }

    /*
     * 显示上下文菜单时调用该方法来添加自定义的上下文菜单项(non-Javadoc)
     * @see android.app.Activity#onCreateContextMenu(android.view.ContextMenu, android.view.View, android.view.ContextMenu.ContextMenuInfo)
     */
    @Override
    public void onCreateContextMenu(ContextMenu menu, View view,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, view, menuInfo);
        // menu.clear();
        menu.setHeaderTitle("上下文菜单");
        menu.setHeaderIcon(R.drawable.face);
        menu.add(0, menuItemId++, Menu.NONE, "菜单项1").setCheckable(true).setChecked(true);
        menu.add(20, menuItemId++, Menu.NONE, "菜单项2");
        menu.add(20, menuItemId++, Menu.NONE, "菜单项3").setChecked(true);
        menu.setGroupCheckable(20, true, true);
        SubMenu sub = menu.addSubMenu(0, menuItemId++, Menu.NONE, "子菜单");
        sub.add("子菜单项1");
        sub.add("子菜单项2");
    }
    
}

完整代码下载:http://download.youkuaiyun.com/detail/zhangpengyu321/5990855
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值