参考
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):使用此方法调用OptionsMenupublic 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.生成上下文菜单

@Overridepublicvoid 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.响应上下文菜单项

@Overridepublicboolean 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)方法非常方便的创建和响应子菜单。

@Overridepublicboolean 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;}

更多相关文章

  1. Android Material Design: NavigationView抽屉导航菜单
  2. android 为activity添加optionMenu选项菜单
  3. android socket 配置文件
  4. Android学习笔记之mainfest文件中android属性
  5. android 下载文件注意事项
  6. mainfest文件中android属性
  7. ~/.dirlst 文件
  8. Android 读取和保存文件(手机内置存储器)
  9. Android——文件存储

随机推荐

  1. Lombok,嗯,真香香香香香香!
  2. 6组精美的纯CSS3悬浮飘带特效
  3. 向钢铁侠学习怎样开发软件[每日前端夜话0
  4. 超酷的 CSS3 复古风格 3D 按钮
  5. HTML5 3D魔方动画
  6. 啥?听说你还在手写复杂的参数校验?
  7. 分析ARM ANDROID市场及技术结合点 转载
  8. 以后要是再写for循环,我就捶自己
  9. HTML5/CSS3 实现漂亮的 3D 滑杆插件
  10. jQuery/CSS3邮票边框的照片墙相册