`
uule
  • 浏览: 6348695 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

Android中的Menu

 
阅读更多

上下文菜单(通过在某元素上长按,来呼出菜单)
选项菜单(通过按手机上的菜单按钮,来呼出菜单) 

重写 onCreateContextMenu 用以创建上下文菜单
重写 onContextItemSelected 用以响应上下文菜单

重写 onCreateOptionsMenu 用以创建选项菜单
重写 onOptionsItemSelected 用以响应选项菜单

当每次Menu显示时,会调用方法onPrepareOptionsMenu,也可以在菜单每次被调用时,对菜单中的项重新生成,通过重载onPrepareOptionsMenu来实现,由于每次调用时都要重新生成,对于那些不经常变化的菜单,效率就会比较低。

调用Menu.addSubMenu()方法,为某个菜单项添加子菜单

public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);

        // 创建 R.id.txt1 的上下文菜单
        if (v == (TextView) this.findViewById(R.id.txt1)) {
            menu.setHeaderIcon(R.drawable.icon01); //设置菜单的图标
            menu.setHeaderTitle("我是菜单"); //设置菜单的标题
           
            // 用 ContextMenu.add() 来增加菜单项,返回值为 MenuItem
            // 第一个参数:组ID
            // 第二个参数:菜单项ID
            即onContextItemSelected(MenuItem item)中item.getItemId
            // 第三个参数:顺序号
            // 第四个参数:菜单项上显示的内容
            menu.add(1, 0, 0, "菜单1");
           
            // MenuItem - 新增菜单项后的返回类型,针对菜单项的其他设置在此对象上操作
            menu.add(1, 1, 1, "菜单2").setCheckable(true);
           
        }
        // 创建 R.id.txt2 的上下文菜单(多级上下文菜单)
        else if (v == (TextView) this.findViewById(R.id.txt2)) {
           
            // ContextMenu.addSubMenu("菜单名称") - 用来添加子菜单。子菜单其实就是一个特殊的菜单
            SubMenu sub = menu.addSubMenu("父菜单1");
            sub.setIcon(R.drawable.icon01);
            sub.add(0, 0, 0, "菜单1");
            sub.add(0, 1, 1, "菜单2");
            sub.setGroupCheckable(1, true, true);

            SubMenu sub2 = menu.addSubMenu("父菜单2");
            sub2.setIcon(R.drawable.icon01);
            sub2.add(1, 0, 0, "菜单3");
            sub2.add(1, 1, 1, "菜单4");
            sub2.setGroupCheckable(1, true, false);
           
        }
    }

 

Example:

自己运行加修改的例子

package com.example.firstandroid;

import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private final int MENU1 = 1;
	private final int MENU2 = 2;
	private final int MENU3 = 3;
	private final int MENU4 = 4;
	private final int MENU5 = 5;
	private final int MENU6 = 6;
	private final int MENU7 = 7;
	private final int MENU8 = 8;
	private final int MENU9 = 9;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		/*
		 * TextView textView = new TextView(this);
		 * textView.setText("Hello Android World!");
		 */
		// setContentView(textView);

		/*
		 * TextView v = (TextView)findViewById(R.id.txt); String text =
		 * getString(R.string.androidTxt); v.setText(text);
		 */
		// ((LinearLayout)findViewById(R.id.layout)).addView(textView);

		TextView v1 = (TextView) findViewById(R.id.txt1);
		TextView v2 = (TextView) findViewById(R.id.txt2);
		TextView v3 = (TextView) findViewById(R.id.txt3);
		registerForContextMenu(v1);
		registerForContextMenu(v2);
		registerForContextMenu(v3);

	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		switch (item.getItemId()) {
			case 0:case 1:case 2: case 3: case 4:case 5:
	        case 6:case 7: case 8: case 9:
	        		Toast.makeText(this, "你选择的是  "+item.getTitle()+ " 菜单", Toast.LENGTH_SHORT).show();  
	            break;  
	        default://对没有处理的事件,交给父类来处理  
	            return super.onContextItemSelected(item);  
		}
		return super.onContextItemSelected(item);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderIcon(R.drawable.ic_action_search);
		// 父菜单图标
		switch (v.getId()) {
		case R.id.txt1:
			menu.setHeaderTitle("我是菜单");
			menu.add(0, MENU1, 0, "菜单1");
			menu.add(0, MENU2, 1, "菜单2");
			menu.add(0, MENU3, 2, "菜单3").setCheckable(true);
			break;
		case R.id.txt2:
			SubMenu s1 = menu.addSubMenu("父菜单1");
			s1.setIcon(R.drawable.ic_action_search);
					//貌似没啥作用
			s1.add(0, 5, 0, "菜单1");
			s1.add(0, 6, 1, "菜单2");
			s1.add(0, 7, 2, "菜单3");

			SubMenu s2 = menu.addSubMenu("父菜单2");
			s2.setHeaderIcon(R.drawable.setting);
			s2.add(1, 8, 0, "菜单3");
			s2.add(1, 9, 1, "菜单4");
			s2.add(1, 10, 2, "菜单5");
			SubMenu s3 = menu.addSubMenu("父菜单3"); //会显示,但没有子菜单
			break;
		case R.id.txt3:
			//1、通过xml文件来添加菜单
			//getMenuInflater().inflate(R.menu.activity_main, menu);
			menu.setHeaderTitle("联系人操作");
			
			 menu.add(1,MENU1,1,"呼叫").setIcon(R.drawable.setting);  
	         menu.add(1,MENU2,2, "清除记录").setIcon(R.drawable.setting);  
			 menu.add(1,MENU3,3,"切换到Q信").setIcon(R.drawable.setting).setEnabled(false);  
			 //menu.add(2,MENU_Q,3,"切换到Q信").setIcon(R.drawable.setting).setEnabled(false);  
			 
			 menu.add(2,MENU4,4,"加入黑名单").setIcon(R.drawable.setting);  
			 menu.add(2,MENU5,5,"加入白名单").setIcon(R.drawable.setting);
			 SubMenu subMenu = menu.addSubMenu(2, MENU6, 6, "系统设置").setIcon(R.drawable.setting);  
			 subMenu.add(1, MENU7, 2, "网络设置");  
			 subMenu.add(1, MENU8, 3, "高级设置");  
			 subMenu.add(1, MENU9, 4, "安全设置");  
					 
		}

	}

	//二、选项菜单
	
	private static final int MENU_CALL = Menu.FIRST;  //1
	private static final int MENU_DELETE = Menu.FIRST+1;
	private static final int MENU_Q 	= Menu.FIRST+2;
	private static final int MENU_BLACK_LIST = Menu.FIRST+3;
	private static final int MENU_WHITE_LIST = Menu.FIRST+4;
	
	 /** 只有当Menu菜单首次被显示时会调用此方法 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		super.onCreateOptionsMenu(menu);  
		//1、通过xml文件来添加菜单
		//getMenuInflater().inflate(R.menu.activity_main, menu);

		//2、通过手动添加来配置上下文菜单选项 
		 menu.add(1,MENU_CALL,1,"呼叫").setIcon(R.drawable.setting);  
         menu.add(1,MENU_DELETE,2, "清除记录").setIcon(R.drawable.setting);  
		 menu.add(2,MENU_Q,3,"切换到Q信").setIcon(R.drawable.setting).setEnabled(false);  
		 menu.add(2,MENU_BLACK_LIST,4,"加入黑名单").setIcon(R.drawable.setting);  
		 menu.add(2,MENU_WHITE_LIST,5,"加入白名单").setIcon(R.drawable.setting);  
		 
		 SubMenu subMenu = menu.addSubMenu(2, MENU6, 6, "系统设置").setIcon(R.drawable.setting);  
		 subMenu.add(1, MENU7, 2, "网络设置");  
		 subMenu.add(1, MENU8, 3, "高级设置");  
		 subMenu.add(1, MENU9, 4, "安全设置");  
		 
		  // 如果希望显示菜单,请返回true  
		return true;
	}

	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		switch (item.getItemId()) {  
			//XML方式
	         /*case R.id.id_call:  
	             Toast.makeText(this, "你选择的是 呼叫  菜单", Toast.LENGTH_LONG).show();  
	             break;  
	         case R.id.id_delete:  
	         case R.id.id_himsg:  
	         case R.id.id_black: 
	         case R.id.id_white:  
	             Toast.makeText(getApplicationContext(), "你选择的是  "+item.getTitle()+ " 菜单", Toast.LENGTH_SHORT).show();  
	             break; */
		     
			//addMenu方式,使用case 1: ...
			case 1:case 2:case 3: case 4:case 5:
			case 6:case 7:case 8: case 9:
				Toast.makeText(getApplicationContext(), "你选择的是  "+item.getTitle()+ " 菜单", Toast.LENGTH_SHORT).show();  
				break;
	         default://对没有处理的事件,交给父类来处理  
	             return super.onMenuItemSelected(featureId, item);  
	         }  
		         //返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了  
		return super.onMenuItemSelected(featureId, item);
	}

	 /** 当每次Menu显示时,会调用此方法*/
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		return super.onPrepareOptionsMenu(menu);
	}	

}
 

选项菜单:


其中的系统设置:


 

上下文菜单:

第一个:


第二个:



第三个:


其中的系统设置:


 

That's all ! 哈哈

 

其中例子参考学习:

http://liuzhichao.com/p/402.html#more-402

http://blog.csdn.net/tenggangren/article/details/7996193

http://www.cnblogs.com/linjiqin/archive/2011/03/08/1977636.html

 

 

 

  • 大小: 16.8 KB
  • 大小: 65.2 KB
  • 大小: 145.6 KB
  • 大小: 65.9 KB
  • 大小: 92.5 KB
  • 大小: 201.5 KB
  • 大小: 120.3 KB
  • 大小: 139.1 KB
分享到:
评论

相关推荐

    Android 中menu同时显示图标和文字的实现

    Android 中menu同时显示图标和文字的实现 Android 中menu同时显示图标和文字的实现是 Android 应用程序中常见的一种需求。默认情况下,Android 中的menu条目在设置其showAsAction=”never”时,默认只显示文字...

    Android中使用Menu

    在Android活动中使用Menu,简单的程序。适应于初学者。 通过res中创建Menu文件,在Activity中通过onCreateOptionsMenu()方法和onOptionsItemSelected()方法实现菜单栏功能

    Android中menu使用详解

    Menu(菜单)是Android中一定会使用的模块,每个Android项目都会用到Menu来给用户起到选择和导航的作用,提升用户体验,...①在res下的menu中创建file_menu.xml: <?xml version=1.0 encoding=utf-8?> <me

    android menu菜单距中显示

    在Android应用开发中,`Menu`是用户界面中不可或缺的一部分,它通常用于在特定操作(如选项、更多操作)上为用户提供快捷访问的途径。在Android系统中,`Menu`通常出现在活动(Activity)的顶部作为选项菜单,或者在...

    Android自定义menu的实现

    在Android开发中,Menu通常用于显示应用程序中的操作选项,如在顶部栏或下拉菜单中。自定义Menu允许开发者根据应用需求设计独特的交互方式和视觉样式。本篇将深入探讨如何在Android中实现自定义Menu。 首先,我们...

    Android MenuDemo Menu全面讲解

    1. 为了处理Menu中的点击事件,需要重写`onOptionsItemSelected(MenuItem item)`方法: ```java @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id....

    Android 按Menu弹出菜单

    在Android应用开发中,"按Menu弹出菜单"是一个常见的功能,它允许用户访问应用程序的主要操作选项。在Android系统中,Menu通常是通过按下设备屏幕右上角的菜单按钮或者长按Home键来触发的。这种九宫格样式的菜单设计...

    Android DropDownMenu下拉菜单.zip

    在Android开发中,`DropDownMenu`是一种常见的交互元素,它允许用户从一组选项中选择一个,通常用于空间有限的界面,如顶部导航栏或者侧滑菜单。本资源提供了`Android DropDownMenu`的一个实现,特点是拥有漂亮的...

    android 另类menu菜单提示

    在Android开发中,Menu是应用界面中不可或缺的一部分,它通常用于在特定的上下文(如选项栏或右上角的三点菜单)中显示一组操作。然而,除了传统的Menu设计之外,开发者还可以创建“另类”Menu菜单来提供更加独特且...

    android自定义menu

    在Android开发中,自定义`Menu`是一种常见的需求,它允许开发者根据应用的特性提供更加个性化的操作选项。本文将深入探讨如何在Android中实现自定义`Menu`,结合源码解析以及工具的使用,帮助你更好地理解这一过程。...

    Android UI之样式Menu

    在Android开发中,UI设计是用户体验的关键组成部分,而Menu作为一种重要的交互元素,常常用于实现应用程序中的下拉选项或操作选项。本教程将深入探讨如何在Android中创建炫酷的弹出菜单,让你的应用脱颖而出。 首先...

    Android_Menu.rar_Android_menu_android_android简单

    在Android应用开发中,菜单(Menu)是用户界面不可或缺的一部分,它通常用于提供应用程序的各种操作选项。本项目“Android_Menu.rar”聚焦于Android系统中如何创建和使用简单的菜单功能,适用于初学者理解并掌握这一...

    安卓Android源码——半透明Menu效果源码.zip

    在安卓(Android)开发中,实现半透明Menu效果是一种常见的需求,这通常涉及到自定义视图、主题样式以及动画的应用。这份"安卓Android源码——半透明Menu效果源码.zip"压缩包提供了一个实例,帮助开发者理解如何创建...

    Android代码-menu单选菜单.zip

    在Android应用开发中,Menu是用户界面中的一个重要组成部分,它通常用于展示应用程序的主要操作选项,让用户能够方便地访问和执行各种功能。在本资源“menu单选菜单.zip”中,我们很显然关注的是如何在Android中创建...

    Android menu单选菜单.rar

    在Android应用开发中,Menu是用户界面中的一个重要组成部分,它提供了在特定上下文中展示一系列操作选项的方式。在标题“Android menu单选菜单.rar”中提到的,我们将关注如何在Android中实现一个单选菜单,即单选列...

    android sliding menu 滑动菜单

    在Android应用开发中,滑动菜单(Sliding Menu)是一种常见的设计模式,它允许用户通过从屏幕边缘向内滑动来展示隐藏的侧边栏菜单。这种设计在移动设备上非常流行,因为它提供了便捷的导航方式,特别是在内容丰富的...

    Android Menu和ListView 整合设计 源码

    Android Menu和ListView 整合设计 源码 package com.MyMenu; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle; import ...

    android Menu 菜单

    在Android应用开发中,Menu是用户界面不可或缺的一部分,它提供了在屏幕顶部或底部显示一系列操作选项的功能。Android Menu主要用于在不占用屏幕空间的情况下为用户提供多种交互方式,如在活动(Activity)的顶部弹...

Global site tag (gtag.js) - Google Analytics