android菜单详解

理解Android的菜单


  1. 选项菜单:最常规的菜单,android中把它叫做option menu
  2. 子菜单:android中点击子菜单将弹出悬浮窗口显示子菜单项。子菜单不支持嵌套,即子菜单中不能再包括其他子菜单。
  3. 上下文菜单:android中长按视图控件后出现的菜单,windows点击右键弹出的菜单即上下文菜单
  4. 图标菜单:这个比较简单,就是带icon的菜单项,需要注意的是子菜单项、上下文菜单项、扩展菜单项均无法显示图标
  5. 选择菜单(alternative menu):用的比较少,以后单独介绍,本文先跳过(其实是我还没弄明白啦o(≧v≦)o~~)
  6. 扩展菜单:选项菜单最多只能显示6个菜单项,超过6个时,第6个菜单项会被系统替换为一个叫“更多”的子菜单,原来显示不下的菜单项都
为“更多”菜单的子菜单项。如下图作 

        


每个activity包含一个菜单,一个菜单又能包含多个菜单项和多个子菜单,子菜单其实也是菜单(因为它实现了Menu接口),因此子菜单也可以包含多个菜单项。OnCreateOptionsMenu()和OnOptionsMenuSelected()是activity中提供了两个回调方法,用于创建菜单项和响应菜单项的点击

1,创建options menu  选项菜单

@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//为了兼容以后的版本
		super.onCreateOptionsMenu(menu);
		
		//多种方式添加菜单项
		
		//menu.add("菜单项1");//1,直接指定标题,这个响应的时候我不知道怎么调用
		//menu.add(R.string.menuitem2);//2,通过资源指定标题
		
		menu.add(1, Menu.FIRST, 1, "菜单项1");//3,显式指定菜单项的组号,ID , 排序,标题
		menu.add(1, Menu.FIRST+1, 2, "菜单项2");
		menu.add(2, Menu.FIRST+2, 3, "菜单项3");
		menu.add(2, Menu.FIRST+3, 4, "菜单项4");
		menu.add(2, Menu.FIRST+4, 5, "菜单项5");
		menu.add(2, Menu.FIRST+5, 6, "菜单项6");//多于6个将会被系统以更多字样替换
		menu.add(2, Menu.FIRST+6, 7, "菜单项7");
		menu.add(2, Menu.FIRST+7, 8, "菜单项8");
		return true;//如果希望现实菜单,返回true
	}

响应菜单项

使用的最多方法是重写activity类的  onOptionsItemSelected(MenuItem) 回调方法,每当有菜单项被点击时,android就会调用该方法,并传入被点击菜单项。
以下代码可作为使用onOptionsItemSelected方法响应菜单的模板来使用,这里为了方便起见将菜单ID硬编码在程序里,你可以使用常量或资源ID来使代码更健壮
@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		
		switch(item.getItemId()){
		case 1:
			//do something
			Toast.makeText(this, "1", Toast.LENGTH_LONG).show();
			break;
		case 2:
			Toast.makeText(this, "2", Toast.LENGTH_LONG).show();
			break;
		case 3:
			Toast.makeText(this, "3", Toast.LENGTH_LONG).show();
			break;
		case 4:
			Toast.makeText(this, "4", Toast.LENGTH_LONG).show();
			break;
		default:
			return super.onOptionsItemSelected(item);
		}
		
		return true;
	}

使用监听器响应菜单项

虽然上边方法是推荐使用的方法,android还是提供了类似java swing的监听器方式来响应菜单。使用监听器的方式分为两步:

//第一步:为菜单项注册监听器
menuItem.setOnMenuItemClickListener(new MyMenuItemClickListener());
//第二步:创建监听器类
class MyMenuItemClickListener implements OnMenuItemClickListener {
    @Override
    publicboolean onMenuItemClick(MenuItem item) {
	switch(){
	// do something here...
	}
       
	return true;    //finish handling
    }
}


该方法先于onOptionsItemSelected执行

2,子菜单Sub Menu

Android支持子菜单,你可以通过addSubMenu(int groupId, int itemId, int order, int titleRes)方法非常方便的创建和响应子菜单。

@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//为了兼容以后的版本
		super.onCreateOptionsMenu(menu);
				
		//添加子菜单
		//一个菜单可以有多个子菜单
		                  menu.addSubMenu(1, Menu.FIRST, 1, "系统设置" );
		SubMenu subMenu = menu.addSubMenu(1, Menu.FIRST+1, 2, "网络设置" );//子菜单支持图标
		subMenu.setIcon(R.drawable.ic_launcher);
		
		MenuItem menuItem = subMenu.add(2, Menu.FIRST+2, Menu.NONE, "菜单项1");//子菜单项不支持显示图标
		//menuItem.setIcon(R.drawable.ic_launcher);
		subMenu.add(2, Menu.FIRST+3, Menu.NONE, "菜单项2");
		subMenu.add(2, Menu.FIRST+4, Menu.NONE, "菜单项3");
		subMenu.add(2, Menu.FIRST+5, Menu.NONE, "菜单项4");
		
		return true;//如果希望现实菜单,返回true
	}
   

上面的代码演示了如何创建子菜单,其菜单项的响应其实就是普通菜单项的响应

3,图标菜单Icon Menu

Android支持在菜单上显示各种各样的图标,这一点我们在上面创建子菜单时已经用到了

SubMenu subMenu = menu.addSubMenu(1, Menu.FIRST+1, 2, "网络设置" );//子菜单支持图标
subMenu.setIcon(R.drawable.ic_launcher);

Android中并不是所谓的菜单项都能加上图标,以下菜单项都是不可以的(这并不意味着程序会报错,而是运行时图标得不到显示):

  • 扩展的菜单项。
  • 子菜单的菜单项
  • 上下文菜单的菜单项

4,ContextMenu简介

在Windows中,我们已经习惯了在文件上单击右键来执行“打开”、“重名名”、“剪切”、“删除”等操作,这个右键弹出的菜单就是上下文菜单.
android是通过长按某个视图元素来弹出上下文菜单的.
上下文菜单与Options Menu最大的不同在于,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们显示地通过
registerForContextMenu(Viewview)来指定。

下面给出一个demo演示如何创建和响应上下文菜单:

1.在activity的onCreate(...)方法中为一个view注册上下文菜单

2.在onCreateContextMenuInfo(...)中生成上下文菜单。

3.在onContextItemSelected(...)中响应上下文菜单项。

 

public class MenuDemoActivity extends Activity {
    private ListView listView; 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        initView();//做一些初始化工作
    }

	private void initView() {
		listView = (ListView) this.findViewById(R.id.listview);
		listView.setAdapter(new MyAdapter());
		this.registerForContextMenu(listView);//1 为所有列表项注册上下文菜单,注意和响应事件不一样
		
		
	}
	//给ListView提供一些数据
	private class MyAdapter extends BaseAdapter{

		public int getCount() {
			
			return 5;
		}

		public Object getItem(int position) {
			// TODO Auto-generated method stub
			return null;
		}

		public long getItemId(int position) {
			// TODO Auto-generated method stub
			return 0;
		}

		public View getView(int position, View convertView, ViewGroup parent) {
			TextView tv = new TextView(MenuDemoActivity.this);
			tv.setText("文件"+position);
			return tv;
		}
		
	}
	
	@Override
	//2 创建上下文菜单
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		
		super.onCreateContextMenu(menu, v, menuInfo);
		menu.setHeaderTitle("文件操作");
		menu.add(1, Menu.FIRST, Menu.NONE, "发送");
		menu.add(1, Menu.FIRST+1, Menu.NONE, "标记为重要");
		menu.add(1, Menu.FIRST+2, Menu.NONE, "重命名");
		menu.add(1, Menu.FIRST+3, Menu.NONE, "删除");
	}
	
	@Override
	//3 响应上下文菜单
	public boolean onContextItemSelected(MenuItem item) {
		switch(item.getItemId()){
		case 1:
			Toast.makeText(this, "发送", 1).show();
			break;
		case 2:
			Toast.makeText(this, "标记为重要", 1).show();
			break;
		case 3:
			Toast.makeText(this, "重命名", 1).show();
			break;
		case 4:
			Toast.makeText(this, "删除", 1).show();
			break;
		default:
			
			return super.onContextItemSelected(item);
		}
		return true;
	}
}
	
	
运行程序,多次调出上下文菜单,注意LogCat的输出, onCreateContextMenu每一次都被调用了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Android Studio中导入Android源码,需按照以下步骤进行: 1. 下载Android源码:首先需要从Android官方网站(https://source.android.com/setup/build/downloading)上下载Android源码的zip文件。选择适合你设备版本的源码,并下载到本地。 2. 解压源码:将下载的源码zip文件解压到你希望存储源码的位置。 3. 导入源码项目:打开Android Studio,并点击“File”菜单,然后选择“New”,再选择“Import Project”。 4. 选择源码目录:在弹出的对话框中,浏览到你已经解压的源码目录,并选择其中的“build.gradle”文件,然后点击“OK”。 5. 等待构建:Android Studio会开始构建项目,可能需要一些时间来完成这个过程,具体时间取决于你的硬件性能和Android源码的大小。 6. 配置项目:构建完成后,你需要配置一些项目属性。你可以根据你的需求进行更改,比如修改Android版本、SDK版本、Gradle版本等。 7. 构建项目:在配置完成后,再次构建项目。你可以点击Android Studio工具栏中的“Build”按钮来完成构建。构建完成后,你就可以进行Android源码的浏览、修改和编译等操作了。 需要注意的是,导入Android源码是一个相对复杂的过程,并且需要一定的硬件配置和软件环境支持。同时,也需要有一定的Android开发和编译经验。因此,在遇到问题时,你可以参考官方文档或在开发者社区中寻求帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值