Android Menu

参考
Android中Menu的基本用法
Android菜单详解(五)——使用XML生成菜单
Android 菜单(OptionMenu)大全 建立你自己的菜单

在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)

一、OptionsMenu
Android Menu_第1张图片
Paste_Image.png

1.res/menu下的activity_main.xml文件
菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用

标签作为根节点。除了标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是


          
          
          

2.MainActivity

package com.example.menutest;  
      
    import android.os.Bundle;  
    import android.app.Activity;  
    import android.view.Menu;  
    import android.view.MenuItem;  
    import android.widget.Toast;  
      
    public class MainActivity extends Activity {  
      
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
            setContentView(R.layout.activity_main);  
        }  
      
        @Override  
        public boolean onCreateOptionsMenu(Menu menu) {  
            // Inflate the menu; this adds items to the action bar if it is present.  
            getMenuInflater().inflate(R.menu.activity_main, menu);  
            return true;//返回true表示显示menu
        }  
      
        @Override  
        public boolean onOptionsItemSelected(MenuItem item) {  
            // TODO Auto-generated method stub  
            switch(item.getItemId()){  
               case R.id.menu_about:             
                   Toast.makeText(MainActivity.this, ""+"关于", Toast.LENGTH_SHORT).show();  
                   break;  
               case R.id.menu_settings:  
                     
                   Toast.makeText(MainActivity.this, ""+"设置", Toast.LENGTH_SHORT).show();  
                   break;  
               case R.id.menu_quit:  
                     
                   Toast.makeText(MainActivity.this, ""+"退出", Toast.LENGTH_SHORT).show();  
                   break;  
               default:  
                   break;  
               } 
               //Toast.makeText(MainActivity.this, ""+item.getItemId(), Toast.LENGTH_SHORT).show();  
          
            return super.onOptionsItemSelected(item);  
        }
    }
public boolean onCreateOptionsMenu(Menu menu):
使用此方法调用OptionsMenu

public boolean onOptionsItemSelected(MenuItem item):
选中菜单项后发生的动作

public void onOptionsMenuClosed(Menu menu):
菜单关闭后发生的动作

public boolean onPrepareOptionsMenu(Menu menu):
选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单

public boolean onMenuOpened(int featureId, Menu menu):
单打开后发生的动作。
二、ContextMenu

参考Android菜单详解(四)——使用上下文菜单ContextMenu
在Windows中,我们已经习惯了在文件上单击右键来执行“打开”、“重命名”、“剪切”、“删除”等操作,这个右键弹出的菜单就是上下文菜单。

Android Menu_第2张图片
每个文件的操作

上下文菜单与Options Menu最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过registerForContextMenu(View view)来指定。

1.注册上下文菜单

/**
 * 上下文菜单演示Demo
 * 
 * @author CodingMyWorld 2011-8-27 下午03:22:39
 */
publicclass SampleContextMenuActivity extends ListActivity {
    privatestaticfinal String TAG ="SampleContextMenuActivity";

    @Override
    protectedvoid onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 显示列表
        simpleShowList();
        // 为所有列表项注册上下文菜单
        this.registerForContextMenu(getListView());
    }

    privatevoid simpleShowList() {
        // list item
        String[] files =new String[] {
            "文件1",
            "文件2",
            "文件3",
            "文件4"
        };
        // simple array adapter
        ArrayAdapter adapter =new ArrayAdapter(
                this, 
                android.R.layout.simple_list_item_1,
                files);
        // set adapter
        this.setListAdapter(adapter);
        Log.v(TAG, "show simple list");
    }
}

2.生成上下文菜单

@Override
publicvoid onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {
    Log.v(TAG, "populate context menu");
    // set context menu title
    menu.setHeaderTitle("文件操作");
    // add context menu item
    menu.add(0, 1, Menu.NONE, "发送");
    menu.add(0, 2, Menu.NONE, "标记为重要");
    menu.add(0, 3, Menu.NONE, "重命名");
    menu.add(0, 4, Menu.NONE, "删除");
}

3.响应上下文菜单项

@Override
publicboolean onContextItemSelected(MenuItem item) {
    // 得到当前被选中的item信息
    AdapterContextMenuInfo menuInfo = (AdapterContextMenuInfo) item.getMenuInfo();
    Log.v(TAG, "context item seleted ID="+ menuInfo.id);
    
    switch(item.getItemId()) {
    case1:
        // do something
        break;
    case2:
        // do something
        break;
    case3:
        // do something
        break;
    case4:
        // do something
        break;
    default:
        return super.onContextItemSelected(item);
    }
    return true;
}
三、SubMenu

参考Android菜单详解(三)——SubMenu和IconMenu

Android Menu_第3张图片
Paste_Image.png
Android Menu_第4张图片
Paste_Image.png

子菜单提供了一种自然的组织菜单项的方式,它被大量地运用在windows和其他OS的GUI设计中。Android同样支持子菜单,你可以通过addSubMenu(int groupId, int itemId, int order, int titleRes)方法非常方便的创建和响应子菜单。

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
    int base = Menu.FIRST;
    // 一个menu可以包括多个子菜单
    SubMenu subMenu = menu.addSubMenu(base, base+1, Menu.NONE, "系统设置");
    // 子菜单可以包括多个菜单项
    MenuItem menuitem1 = subMenu.add(base, base+1, base+1, "显示设置");
    subMenu.add(base, base+2, base+2, "网络设置");
    subMenu.add(base, base+3, base+3, "高级设置");
    subMenu.add(base, base+4, base+4, "安全设置");
    
    // 子菜单项不支持显示图标,这样做是没意义的,尽管不会报错!
    menuitem1.setIcon(R.drawable.displaysettings);
    
    //但是子菜单本身是支持图标的
    subMenu.setIcon(R.drawable.settings);
    
    // 显示菜单请返回true
    return true;
}

你可能感兴趣的:(Android Menu)