选项菜单

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. linux的vnc- rdesktop远程登录windows桌面

    使用vnc来实现任何平台之间(windows, linux, mac等)的远程桌面互访 vnc:virtual network computing 分 vnc server和 vnc client 在 ...

  2. CSS包含块containing block详解

    “包含块(containing block)”,W3c中一个很重要的概念,今天带大家一起来好好研究下. 初步理解 在 CSS2.1 中,很多框的定位和尺寸的计算,都取决于一个矩形的边界,这个矩形,被称 ...

  3. show slave各项参数解释

    how slave status 各个参数的解释 -- mysql 分类: mysql基础2012-08-23 11:03 2315人阅读 评论(0) 收藏 举报 服务器sslfilesqltable ...

  4. Junit4.x扩展:运行指定方法

    相信很多道友搞开发的一般都会用到Junit单元测试工具,不知道大家有没有遇到一个这样的问题: 有的单元测试用例有很多@Test方法,甚至有的方法会执行很长时间,只能空等执行.而实际上我们只需要运行其中 ...

  5. ubuntu同步系统时间命令

      *设置时区的命令 sudo tzselect 然后一步步选择就行 *同步时间的命令 sudo ntpdate ntp.ubuntu.com

  6. [BZOJ2724][Violet 6]蒲公英

    [BZOJ2724][Violet 6]蒲公英 试题描述 输入 修正一下 l = (l_0 + x - 1) mod n + 1, r = (r_0 + x - 1) mod n + 1 输出 输入示 ...

  7. java.sql.date与java.util.date区别以及数据库中插入带时分秒的时间

    java.sql.Date,java.sql.Time和java.sql.Timestamp三个都是java.util.Date的子类(包装类). java.sql.Date是java.util.Da ...

  8. 不用任何图片,只用简单的css写出唯美的钟表,就问你行吗?

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAGHCAIAAABJR31QAAAgAElEQVR4nOy9aXhc1ZUurPvcH7f73n ...

  9. Install ssdb-rocks on CentOS 6

    Install ssdb-rocks on CentOS 6 C.C.  发表于 2014年08月10日 20:14 | Hits: 649 为了优化节操精选的弹幕系统,打算更换到Facebook的R ...

  10. 【Linux】/dev/null 2>&1 详解

     今天一个朋友突然在自己的维护的Linux中, /var/spool/cron/root 中看到了以下的内容: 30 19 * * * /usr/bin/**dcon.sh > /dev/nul ...