实现选项菜单、上下文菜单,以及菜单内部的子菜单。

视图效果:

MainActivity 选项菜单 选项菜单的子菜单 上下文菜单(按住按钮或者EditText弹出)

注意:上下文菜单如何弹出?在注册该菜单的视图上按住一段时间后就会弹出菜单。

MainActivity.java

package com.evor.test;

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); Button btn1 = (Button)findViewById(R.id.btn1);
EditText edt1 = (EditText)findViewById(R.id.edt1);
//注册上下文菜单(按住该视图一段时间后就会出现menu)
registerForContextMenu(btn1);
registerForContextMenu(edt1);
} //实现选项菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//参数: groupid,itemid,order,titleRes
MenuItem item1 = menu.add(1,1,1,"菜单项1");
MenuItem item2 = menu.add(1,2,2,"菜单项2");
MenuItem item3 = menu.add(1,3,3,"菜单项3");
item3.setIntent(new Intent(this,MainActivity.class)); //设定关联的Activity,点击后会转到该activity MyOnMenuItemClickListener menuItemClickListener = new MyOnMenuItemClickListener();
item1.setOnMenuItemClickListener(menuItemClickListener);
item2.setOnMenuItemClickListener(menuItemClickListener);
item3.setOnMenuItemClickListener(menuItemClickListener); //添加子菜单
SubMenu fileSubMenu = menu.addSubMenu(1,4,4,"文件");
MenuItem submenuItem1 = fileSubMenu.add(1,5,2,"新建");
MenuItem submenuItem2 = fileSubMenu.add(2,6,3,"打开");
MenuItem submenuItem3 = fileSubMenu.add(2,7,4,"退出");
submenuItem1.setCheckable(true); //设置为多选框
submenuItem2.setChecked(false); //设置是否被勾选
submenuItem3.setChecked(true); //设置是否被勾选
fileSubMenu.setGroupCheckable(2, true, true); //第三参数确定为单选还是多选
return true;
} //内部类--选项菜单的菜单项响应类
private class MyOnMenuItemClickListener implements OnMenuItemClickListener{
@Override
public boolean onMenuItemClick(MenuItem item) {
switch(item.getItemId()){
case 1 : {Toast.makeText(MainActivity.this, "点击了菜单项1", Toast.LENGTH_SHORT).show(); break;}
case 2 : {Toast.makeText(MainActivity.this, "点击了菜单项2", Toast.LENGTH_SHORT).show(); break;}
case 3 : {Toast.makeText(MainActivity.this, "点击了菜单项3", Toast.LENGTH_SHORT).show(); break;}
}
return true;
}
} //上下文菜单的回调函数
@Override
public void onCreateContextMenu(ContextMenu menu,View view,ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu, view, menuInfo);
menu.setHeaderTitle("上下文菜单");
int itemid = 0;
menu.add(0,itemid++, Menu.NONE, "菜单项1");
menu.add(0,itemid++, Menu.NONE, "菜单项2");
menu.add(0,itemid++, Menu.NONE, "菜单项3"); SubMenu subMenu = menu.addSubMenu("子菜单");
subMenu.add("选项1");
subMenu.add("选项2");
} //菜单事件
@Override
public boolean onPrepareOptionsMenu(Menu menu){
//在显示选项菜单之前被调用,一般可用来修改即将显示的选项菜单
super.onPrepareOptionsMenu(menu);
return true;
} @Override
public void onOptionsMenuClosed(Menu menu){
//在关闭选项菜单时被调用
super.onOptionsMenuClosed(menu);
} @Override
public void onContextMenuClosed(Menu menu) {
// 在关闭上下文菜单时调用
super.onContextMenuClosed(menu);
} @Override
public boolean onMenuOpened(int featureId, Menu menu) {
//在显示选项菜单之前调用,该方法在onPrepareOptionsMenu方法之后调用
return super.onMenuOpened(featureId, menu);
}
}

activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.evor.test.MainActivity" >
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="关联菜单的按钮"
/>
<EditText
android:id="@+id/edt1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="关联菜单的编辑框"
/>
</LinearLayout>

Android学习笔记--Menu菜单的使用的更多相关文章

  1. Android学习笔记——Menu(二)

    知识点: 这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu). 上下文菜单 上下文菜单提供对UI界面上的特定项或上下文框架的操作,就 ...

  2. android学习笔记23——菜单

    菜单在桌面应用程序中使用非常广泛,由于手机屏幕的制约,菜单在手机应用中减少不少. android应用中的菜单默认是不可见的,只有当用户单击手机上“Menu”键时,系统才会显示该应用关联的采用项. an ...

  3. Android学习笔记——Menu(三)

    知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提 ...

  4. Android学习笔记——Menu(一)

    背景: Android3.0(API level 11)开始,Android设备不再需要专门的菜单键. 随着这种变化,Android app应该取消对传统6项菜单的依赖.取而代之的是提供anction ...

  5. Android学习笔记上下文菜单

    布局文件main_activity.xml <?xml version="1.0" encoding="utf-8"?> <RelativeL ...

  6. Android学习笔记——menu

    该工程的功能是实现两个数相乘,并在另外一个Activity中显示计算的结果 以下的代码是MainActivity.java中的代码 package com.example.menu; import a ...

  7. 【转】 Pro Android学习笔记(三五):Menu(6):XML方式 & PopUp菜单

    目录(?)[-] 利用XML创建菜单 XML的有关属性 onClick事件 Pop-up菜单 利用XML创建菜单 在代码中对每个菜单项进行设置,繁琐且修改不灵活,不能适配多国语言的要求,可以利用资源进 ...

  8. 【转】 Pro Android学习笔记(三三):Menu(4):Alternative菜单

    目录(?)[-] 什么是Alternative menu替代菜单 小例子说明 Alternative menu代码 关于Category和规范代码写法 关于flags 多个匹配的itemId等参数 什 ...

  9. 【转】 Pro Android学习笔记(三四):Menu(5):动态菜单

    目录(?)[-] OptionsMenu的创建方式 如何再次创建OptionsMenu 每次访问都重新填充菜单项 OptionsMenu的创建方式 OptionMenu在第一次访问该菜单时调用,只调用 ...

随机推荐

  1. City Tour

    Description Alice想要从城市A出发到城市B,由于Alice最近比较穷(不像集训队陈兴老师是个rich second),所以只能选择做火车从A到B.不过Alice很讨厌坐火车,火车上人比 ...

  2. Android手机音量的控制

    1.AudioManager audio=(AudioManager) super.getSystemService(Context.AUDIO_SERVICE);//获得手机的声音服务 //设置加音 ...

  3. Mysql auto_increment 重新计数(让id从1开始)

    当清空一个表的时候,重新插入数据,发现auto_increment属性的字段计数不是从1开始的时候,可以使用以下命令   方法一 delete from test; alter table `test ...

  4. zookeeper[3] zookeeper API开发注意事项总结

    如下是根据官方接口文档(http://zookeeper.apache.org/doc/r3.4.1/api/org/apache/zookeeper/ZooKeeper.html#register( ...

  5. hibernate 一对多操作(级联操作)

    一对多级联操作 1.  级联保存 复杂写法 Company company = new Company(); company.setcName("Hello"); company. ...

  6. PHP设计模式笔记六:数据对象映射模式 -- Rango韩老师 http://www.imooc.com/learn/236

    数据对象映射模式 1.数据对象映射模式,是将对象和数据存储映射起来,对一个对象的操作会映射为对数据存储的操作 2.在代码中实现数据对象映射模式,我们将实现一个ORM类,将复杂的SQL语句映射成对象属性 ...

  7. Collision使用 获取其组件执行变色操作

    using UnityEngine; using System.Collections; public class CyCollision : MonoBehaviour { void OnColli ...

  8. IIS7.0 Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站

    配置环境 Windows版本:Windows Server 2008 R2 Enterprise Service Pack 1 系统类型: 64 位操作系统 了解HTTPS 为什么需要 HTTPS ? ...

  9. 谈谈Ext JS的组件——布局的用法

    概述 在Ext JS中.包括两类布局:组件类布局和容器类布局.由于有些组件是有不同的组件组合而成的,如字段就由标题和输入框构成,他们之间也是存在布局关系的,而这就须要组件类布局来处理组件内自己特有的布 ...

  10. dojo 学习笔记之dojo.query - query(id) 与query(class)的差别

    考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用d ...