android基础知识2:MENU菜单

本文详述了Android中的菜单使用,包括选项菜单的直接添加、XML添加、自定义及动态显示,同时介绍了上下文菜单的定义及其在TextView上的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要介绍两种菜单:选项菜单和上下文菜单。

1.选项菜单是你点击menu键出现在屏幕的下面的选项,很多软件都有选项菜单的使用。如联系人设置,分享等。只不过现在越来越多的手机选择取消menu菜单,所以ActionBar成了替代Menu的控件。还有就是很多软件自己定义了选项菜单。如UC浏览器。
2.上下文菜单主要是长按事件。如记事本的复制 粘贴等。 在长按过程中,我们还可以传递一些数据。


一:选项菜单。

(1)直接添加.
menu选项有两种添加方式,一种是在代码中直接通过menu.add添加。一种是在xml中定义,然后添加通过getMenuInflater添加到代码中。
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {// 显示一个menu菜单
		// TODO Auto-generated method stub
		menu.add(0, 0, 0, "关于");
		/*
		 * MenuItem m = menu.add(0, 1, 1, "退出"); m.setIntent(new
		 * Intent(this,Other.class)); m.setOnMenuItemClickListener(new
		 * OnMenuItemClickListener(){
		 * 
		 * @Override public boolean onMenuItemClick(MenuItem item) {
		 * //注意这个地方有一个返回值。 // TODO Auto-generated method stub
		 * Toast.makeText(MainActivity.this, "good", Toast.LENGTH_LONG).show();
		 * return true ; //返回false和返回true不知道有什么区别。 }
		 * 
		 * }); //可以直接實現跳轉
		 */
		SubMenu fileMenu = menu.addSubMenu(0, 7, Menu.NONE, "file"); // 建立父菜单的选项
		SubMenu editMenu = menu.addSubMenu(0, 8, Menu.NONE, "edit");
		fileMenu.setIcon(R.drawable.ic_launcher);
		fileMenu.setHeaderIcon(R.drawable.ic_launcher);
		fileMenu.setHeaderTitle("请选择你要的颜色:");
		fileMenu.add(0, 1, Menu.NONE, "new"); // 建立子菜单选项
		fileMenu.add(0, 2, Menu.NONE, "open");
		fileMenu.add(0, 3, Menu.NONE, "save");
		fileMenu.setGroupCheckable(0, true, true); // 这三个属性是什么意思。
		editMenu.add(0, 4, Menu.NONE, "undo").setCheckable(true);// 设置个别选项为可选按钮
		editMenu.add(0, 5, Menu.NONE, "redo");
		return super.onCreateOptionsMenu(menu);// 此方法用户创建菜单
		/*
		 * menu.add(int groupId,int itemId,int order,int titleRes) groupId
		 * :所有操作群组的ID itemId ;每一个操作项目的Id order : 操作项目的安排顺序 titleRes :
		 * 操作项目所显示的标题。 menu.add(0,0,0,"视频") .setIcon(R.drawable.ic_launcher)
		 * 设置背景图片, .setShortcut('0', 'a'); 设置快捷键方式。点击a的时候相应事件。
		 */
	}

	public boolean onPrepareOptionsMenu(Menu menu) {
		// 选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
		return false;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {// 点击的时候触发
		// TODO Auto-generated method stub
		super.onOptionsItemSelected(item);
		switch (item.getItemId()) {
		case 0:
			Toast.makeText(MainActivity.this, "点击了选项菜单", Toast.LENGTH_LONG)
					.show();
			break;
		case 1:
			this.finish(); // 当为一的时候,退出程序。
		}
		return true;
	}

	public void onOptionsMenuClosed(Menu menu) {
		// 当菜单关闭的时候执行
	}

	public boolean onMenuOpened(int featureId, Menu menu) {// 单打开后发生的动作。
		return false;
	}
(2)通过xml添加:
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		MenuInflater in = getMenuInflater();
		in.inflate(R.menu.option_menu, menu);
		return true;


	}
res/menu/option_item.xml
<?xml version="1.0" encoding="utf-8"?>  
<menu xmlns:android="http://schemas.android.com/apk/res/android" >  
    <item android:id="@+id/item1"  
        android:title="视频"/>  
     <item android:id="@+id/item2"  
        android:title="上传"/>  
</menu>  
(3)自定义菜单

Android 菜单(OptionMenu)大全 建立你自己的菜单

(4)动态显示的菜单-根据代码显示不同的菜单选项

Android的Menu状态动态设置方法onPrepareOptionsMenu(Menu menu)  

Android实例剖析笔记(二)          这个介绍了android例子中的动态菜单技术,没有怎么看懂。大致意思就是注册 CATEGORY_ALTERNATIVE。判断增加一个动态菜单。

2.上下文菜单

(1)定义所有的上下文
@Override  
    public void onCreateContextMenu(ContextMenu menu, View v,  
                    ContextMenuInfo menuInfo) {  
            // TODO Auto-generated method stub  
            super.onCreateContextMenu(menu, v, menuInfo);  
            menu.add(0,0,0,"1");  //建立上下文菜单  
            menu.add(0,1,0,"d");  
    }  
    @Override  
    public boolean onContextItemSelected(MenuItem item) {  
            // TODO Auto-generated method stub  
            AlertDialog.Builder builder = new AlertDialog.Builder(this);  //新建一个窗口  
            builder.setTitle("Title");  //设置窗口的标题  
             String message =null ;    
            switch(item.getItemId())   //判断点击的是那个菜单  
            {  
            case 0 :  
                    message="0";  
                    break;  
            case 1 :  
                    message="1";  
        break ;  
            }  
              
            builder.setMessage(message) ;   //设置显示信息  
            builder.setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {  
                      
                    @Override  
                    public void onClick(DialogInterface dialog, int which) {  
                            // TODO Auto-generated method stub  
                            setResult(RESULT_OK);  
                    }  
            });    //添加一个点击事件到窗口  
            builder.create();  //建立这个窗口  
            builder.show(); // 显示这个窗口  
            return true ;  
    }  
    } 

另外,在onCreateContextMenu中,可以通过ContextMenuInfo menuInfo传递数据。
	@Override  
    public void onCreateContextMenu(ContextMenu menu, View view,  
            ContextMenuInfo menuInfo) {  
        // Inflate the menu from xml.  
        getMenuInflater().inflate(R.menu.context_menu, menu);  
  
  
        // Use the current item to create a custom view for the header.  
        final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;  
        final Cursor c =  
                (Cursor) mAlarmsList.getAdapter().getItem(info.position);  
        
    }  
(2)可以单独定义一个TextView的上下文选项
 TextView eidt = (TextView)findViewById(R.id.textview);         //先在Activity中定义一个view
  registerForContextMenu(eidt);             //  注册这个view的事件,为menu事件,当长时间按住这个view的时候,事件将会被触及。
//然后重写onCreateContextMenu这个方法,定义自己想要的menu菜单。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值