android menu菜单 onCreateOptionsMenu onMenuItemSelected onContextItemSelected

来源:互联网 发布:织梦数据库配置文件 编辑:程序博客网 时间:2024/05/15 03:37

废话少说,请看代码,外加有详细的注释


package cn.chen.menu;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;

public class MenuActivity extends Activity {
    private static final String TAG = "MenuActivity";
    
    private static final int MENU_ADD = Menu.FIRST;
    private static final int MENU_UPDATE = Menu.FIRST + 1;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            TextView textView = (TextView)findViewById(R.id.ids);
            textView.setOnCreateContextMenuListener(this); //为控件安装上下文
        }
   
        //创建上下文菜单
        @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            getMenuInflater().inflate(R.menu.content_menu, menu);
            super.onCreateContextMenu(menu, v, menuInfo);
        }

        //上下文菜单响应
        @Override
        public boolean onContextItemSelected(MenuItem item) {
            switch (item.getItemId()) {
            case R.id.edit:
                  setTitle("context编辑");
                break;
            case R.id.delete:
                  setTitle("context删除");
                break;
            default:
                break;
            }
            return super.onContextItemSelected(item);
        }

        /** 只有当Menu菜单首次被显示时会调用此方法 */
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            //xml添加menu
            getMenuInflater().inflate(R.menu.menu, menu);
            
            //代码添加menu
            /**
             * menu.add(int groupId, int itemId, int order, CharSequence title)
             * groupId为组ID,这里用不到,所以设置成Menu.NONE
             * itemId为项ID,当命令被点击时,要区别点击的命令,所以设置以不同的ID
             * order为排列次序,值越小排的越前(不能为负数),这里按添加顺序排,所以也设置成Menu.NONE
             * title为要显示的命令名称
             */
        menu.add(Menu.NONE, MENU_ADD, Menu.NONE, "添加");  
        menu.add(Menu.NONE, MENU_UPDATE, Menu.NONE, "更新");
        return super.onCreateOptionsMenu(menu);
        }
        
        /** 当每次Menu显示时,会调用此方法 此例中没用到*/
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
                  return super.onPrepareOptionsMenu(menu);
        }
        
        /** 当Menu有命令被选择时,会调用此方法 */
        @Override
        public boolean onMenuItemSelected(int featureId, MenuItem item) {
        switch (item.getItemId()) {
        case R.id.menu_item_add:
              setTitle("xml添加");
               return true;
          case R.id.menu_item_update:
              setTitle("xml更新");
               return true;
          case MENU_ADD:
              setTitle("手动添加");
               return true;
          case MENU_UPDATE:
              setTitle("手动更新");
               return true;
          default:
                  return super.onMenuItemSelected(featureId, item);
          }
        }
    
        /** 当每次Menu关闭时,会调用此方法 此例中没用到*/
        @Override
        public void onOptionsMenuClosed(Menu menu) {
                  super.onOptionsMenuClosed(menu);
        }
    }


res/menu/menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@+id/menu_item_add"
        android:title="@string/add"
        android:icon="@drawable/icon"/>
    <item android:id="@+id/menu_item_update"
        android:title="@string/update"
        android:icon="@drawable/icon"/>
</menu>

res/menu/content_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:id="@+id/edit"
        android:title="@string/edit"
        android:icon="@drawable/icon"/>
    <item android:id="@+id/delete"
        android:title="@string/delete"/>
        
</menu>