选项菜单

1.菜单的生命周期

* onCreateOptionsMenu()   选项菜单创建时调用(启动Activity时调用 只调用1次)
* onPrepareOptionsMenu() 选项菜单准备时调用(点击Menu键时调用 调用多次)
* onOptionsItemSelected() 选项菜单项选中时调用
* onOptionsMenuClosed() 选项菜单关闭时

2.onCreateOptionsMenu()方法

在onCreateOptionsMenu()中添加菜单项,建议使用

menu.add(1, Menu.FIRST, Menu.FIRST, "xx");
menu.add(1, Menu.FIRST+1, Menu.FIRST+1, "xx");
menu.add(1, Menu.FIRST+2, Menu.FIRST+2, "xx");

添加子菜单

SubMenu sub = menu.addSubMenu(1, Menu.FIRST+4, Menu.FIRST+4, "xxx");

在子菜单中添加菜单项

sub.add(2, Menu.FIRST+5, Menu.FIRST+5, "xx");
sub.add(2, Menu.FIRST+6, Menu.FIRST+6, "xx");
sub.add(2, Menu.FIRST+7, Menu.FIRST+7, "xx");

3.onOptionsItemSelected()方法

在onOptionsItemSelected()中进行菜单项选中事件的操作 比如

int id = item.getItemId();
switch(id) {
case Menu.FIRST:
...
break;
case Menu.FIRST+1:
...
break;
}

例:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(1, Menu.FIRST, Menu.FIRST, "红");
menu.add(1, Menu.FIRST + 1, Menu.FIRST + 1, "黄");// 菜单项
menu.add(1, Menu.FIRST + 2, Menu.FIRST + 2, "蓝"); // 菜单项
menu.add(1, Menu.FIRST + 3, Menu.FIRST + 3, "绿"); // 菜单项
// 添加子菜单
SubMenu sub = menu.addSubMenu(1, Menu.FIRST + 4, Menu.FIRST + 4, "更多"); // 子菜单
sub.add(2, Menu.FIRST + 5, Menu.FIRST + 5, "其他1");
sub.add(2, Menu.FIRST + 6, Menu.FIRST + 6, "其他2");
sub.add(2, Menu.FIRST + 7, Menu.FIRST + 7, "其他3"); // Inflate the menu; this adds items to the action bar if it is present.
//MenuInflater inflater = getMenuInflater();
//inflater.inflate(R.menu.main, menu);
return true;
} @Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);
} @Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
switch (id) {
case Menu.FIRST:
textview.setTextColor(Color.RED);
break;
case Menu.FIRST + 1:
textview.setTextColor(Color.YELLOW);
break;
case Menu.FIRST + 2:
textview.setTextColor(Color.BLUE);
break;
case Menu.FIRST + 3:
textview.setTextColor(Color.GREEN);
break;
case Menu.FIRST + 5:
textview.setTextColor(Color.CYAN);
break;
case Menu.FIRST + 6:
textview.setTextColor(Color.GRAY);
break;
case Menu.FIRST + 7:
textview.setTextColor(Color.MAGENTA);
break;
}
return super.onOptionsItemSelected(item);
} @Override
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
}

上下文菜单

第一种方式

1.生命周期

onCreateContextMenu();//创建菜单时调用
onContextItemSelected();//选中上下文时调用
onContextMenuClosed();//关闭菜单时调用

例:

registerForContextMenu(textview);

@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
switch (v.getId()) {
case R.id.textview:
menu.add(3, Menu.FIRST+5, Menu.FIRST+5, "红");
menu.add(3, Menu.FIRST+6, Menu.FIRST+6, "黄");
SubMenu submenu = menu.addSubMenu(3, Menu.FIRST+7, Menu.FIRST+7, "其他");
submenu.add(4, Menu.FIRST+8, Menu.FIRST+8, "蓝");
submenu.add(4, Menu.FIRST+9, Menu.FIRST+9, "绿");
break; }
super.onCreateContextMenu(menu, v, menuInfo);
} @Override
public boolean onContextItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case Menu.FIRST+5:
textview.setBackgroundColor(Color.RED);
break;
case Menu.FIRST+6:
textview.setBackgroundColor(Color.YELLOW);
break;
case Menu.FIRST+8:
textview.setBackgroundColor(Color.BLUE);
break;
case Menu.FIRST+9:
textview.setBackgroundColor(Color.GREEN);
break;
}
return super.onContextItemSelected(item);
} @Override
public void onContextMenuClosed(Menu menu) {
// TODO Auto-generated method stub
super.onContextMenuClosed(menu);
}

 第二种方式

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/m1"
android:title="m1">
<menu>
<item
android:id="@+id/m5"
android:title="m5"></item>
</menu>
</item>
<item
android:id="@+id/m2"
android:title="m2"></item>
<item
android:id="@+id/m3"
android:title="3"></item>
<item
android:id="@+id/m4"
android:title="m4"></item>
</menu>
public class MainActivity extends AppCompatActivity {

    private ListView listview;
private List<String> list;
private ArrayAdapter<String> adapter;
private int position; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listview = (ListView) findViewById(R.id.listview);
initData();
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,list);
listview.setAdapter(adapter);
registerForContextMenu(listview);
} private void initData() {
list = new ArrayList<>();
for (int i = 0; i < 30; i++) {
list.add("王者--"+i);
}
} @Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getMenuInflater().inflate(R.menu.menu,menu);
} @Override
public boolean onContextItemSelected(MenuItem item) {
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
if(menuInfo!=null){
position = menuInfo.position;
}
switch (item.getItemId()){
case 1:
list.add(0,"王者");
break;
case 2:
list.set(position,"王者归来");
adapter.notifyDataSetChanged();
break;
case 3:
list.remove(position);
adapter.notifyDataSetChanged();
break;
}
return super.onContextItemSelected(item);
}
}

Menu菜单的更多相关文章

  1. Android开发中的menu菜单

    复写onCreateOptionsMenu方法,当点击menu菜单时,调用该方法. @Override public boolean onCreateOptionsMenu(Menu menu) { ...

  2. SharePoint 2013 激活标题字段外的Menu菜单

    前言 SharePoint 有个很特别的字段,就是标题(Title)字段,无论想要链接到项目,还是弹出操作项目的菜单,都是通过标题字段,一直以来需要的时候,都是通过将标题字段改名进行的. 其实,Sha ...

  3. Ecshop 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  4. [转]ExtJs4 笔记(13) Ext.menu.Menu 菜单、Ext.draw.Component 绘图、Ext.resizer.Resizer 大小变更

    作者:李盼(Lipan)出处:[Lipan] (http://www.cnblogs.com/lipan/)版权声明:本文的版权归作者与博客园共有.转载时须注明本文的详细链接,否则作者将保留追究其法律 ...

  5. 后台增加一个左侧列表菜单menu菜单的方法

    Ecshop 后台增加一个左侧列表菜单menu菜单需要修改三个文件:/admin/includes/inc_menu.php/admin/includes/inc_priv.php/languages ...

  6. node-webkit教程<>Native UI API 之Menu(菜单)

    node-webkit教程(6)Native UI API 之Menu(菜单)1 前言... 2 6.1  Menu 概述... 3 6.2  menu api6 6.2.1  new Menu([o ...

  7. Android4.0 -- UI控件之 Menu 菜单的的使用(三)

    上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...

  8. Android4.0 -- UI控件之 Menu 菜单的的使用(一)

      这一讲开始我们来讲一下Android中菜单的使用方法,菜单是应用中的普通的组件,主要是提供友好和专注的用户体验,你可以在你的Activity中使用 Menu APIs 来提供用户动作和其他选项的操 ...

  9. android menu菜单自动生成

    Android提供了一些简单的方法来为应用添加Menu菜单. 提供了三种类型应用菜单: 一.Options Menu:通过Menu按钮调用菜单 1.在/res/目录下新建menu文件夹,用于存储Men ...

  10. EasyUI - Menu 菜单

    效果: html代码: <div id="mm" class="easyui-menu"> <div id =">New< ...

随机推荐

  1. word表格断行的问题

    word一个表格如果某一行的 内容 太多,就会自动跑到下一页去了 解决方法是: 在表格上点右键-> 属性 -> "行" -> 去掉"设置行高" ...

  2. 5 Tips for creating good code every day; or how to become a good software developer

    Being a good developer is like being any other good professional, it’s all it’s about doing as much ...

  3. jQuery1.11源码分析(7)-----jQuery一些基本的API

    这篇文章比较繁杂,主要就是把jQuery源码从上到下列出来,看我的注释就好了. jQuery源码对各种加载器做了处理. //阅读这个源码是请先了解一下概念,即时函数,工厂模式 (function( g ...

  4. 3月23.CSS表格布局

    360表格布局: CSS定义标签: @charset "utf-8";/* CSS Document */.bt1{ border:#309 solid 1px; height:1 ...

  5. C#内部类

    http://blog.csdn.net/yanghua_kobe/article/details/6685222 在<Java编程思想>中花了一章的篇幅介绍,内部类的相关特性.而在C#的 ...

  6. 从零开始写一个武侠冒险游戏-7-用GPU提升性能(2)

    从零开始写一个武侠冒险游戏-7-用GPU提升性能(2) ----把地图处理放在GPU上 作者:FreeBlues 修订记录 2016.06.21 初稿完成. 2016.08.06 增加对 XCode ...

  7. opencv中,c和c++版本区别体验

    参考:http://www.cnblogs.com/tornadomeet/archive/2012/04/29/2476277.html

  8. Centos下samba共享打印机

    先说需求,公司有一台型号为HP LaserJet m1120 mfp的打印机,由于不是网络打印机使用起来十分不便,公司老大要求将这台打印机连在公司的内网linux服务器上(CentOS),然后配置sa ...

  9. 《转》Visual Studio 2010 终极定制安装精简方法

    打开VS2010安装目录下的 Setup 文件夹,找到 baseline.dat 文件和 vs_setup.pdi 文件还有一个 locdata.ini 文件,是对应的. 这些都是文本文件,用记事本就 ...

  10. XShell上传下载命令

    参考:https://www.centos.bz/2012/12/xshell-securecrtrz-sz-upload-download/ 上传文件时,执行rz就会弹出文件选择对话框来选择文件.下 ...