Android-三种菜单栏实现(OptionMenu,SubMenu,ContextMenu)

1.回顾

   上篇学习了 安卓的 notification 通知实现

2.重点

   (1)OptionMenu 的 动态和 静态实现

   (2)Submenu 的动态和静态实现

   (3)ContextMenu 的 动态和静态实现

3.OptionMenu实现

   3.1 OptionMenu 菜单栏效果图

                                                             

     3.2 静态实现(menu 文件下新建 menu.xml)

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/option_item1"
        android:orderInCategory="100"
        android:title="去OptionActivity"/>
    <item
        android:id="@+id/option_item2"
        android:orderInCategory="100"
        android:title="去Contextmenu"/>

</menu>


    3.3 业务实现

	/**
	 * 重写 onCreateOptionsMenu
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
	
     //动态实现
	 MenuItem item=	menu.add(1, 1, 1,"河南");
	 item.setTitle("原");
		menu.add(1, 2, 1,"理工");
		menu.add(1, 3, 1,"大学");
		menu.add(2, 3, 1,"焦作");
		
		//加载 布局实现
		getMenuInflater().inflate(R.menu.option_menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

   3.4 选择事件 

/**
	 * 菜单 点击 重写onMenuItemSelected
	 */
	@Override
	public boolean onMenuItemSelected(int featureId, MenuItem item) {
		
		 Toast.makeText(getApplicationContext(),featureId+" | "+item.getTitle(),Toast.LENGTH_LONG).show();
		// item 点击
		switch (item.getItemId()) {
		case R.id.option_item1:
			 Intent intent= new Intent(MainActivity.this,OptionActivity.class);
			 intent.putExtra("data",item.getTitle());
			 item.setIntent(intent);
			break;
		case R.id.option_item2:
			Intent intent1= new Intent(MainActivity.this,ContextmenuActivity.class);
			 item.setIntent(intent1);
			break;
		}
		return super.onMenuItemSelected(featureId, item);
	}



4.Submenu 实现

    4.1 SubMenu 菜单效果图

                                                              


   4.2 静态实现 menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/sub_one"
        android:title="工程">
        <menu>
            <item
                android:id="@+id/sub_one_item1"
                android:orderInCategory="100"
                android:title="Open project"/>
            <item
                android:id="@+id/sub_one_item2"
                android:orderInCategory="100"
                android:title="Close project"/>
            <item
                android:id="@+id/sub_one_item3"
                android:orderInCategory="100"
                android:title="HI project"/>
        </menu>
    </item>
    <item
        android:id="@+id/sub_two"
        android:title="窗体">
        <menu>
            <item
                android:id="@+id/sub_two_item1"
                android:orderInCategory="100"
                android:title="show view"/>
            <item
                android:id="@+id/sub_two_item2"
                android:orderInCategory="100"
                android:title="preference"/>
            <item
                android:id="@+id/sub_two_item3"
                android:orderInCategory="100"
                android:title="New Window"/>
        </menu>
    </item>

</menu>

   4.3 业务实现

/**
	 * 创建菜单
	 */
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
	   
		//动态创建(代码创建)
		//添加第一项
//		SubMenu subMenu= menu.addSubMenu("工程");
//		subMenu.add(1, 1, 1,"打开工程");
//		subMenu.add(1, 2, 1,"关闭工程");
//		subMenu.add(1, 3, 1,"Build工程");
//		subMenu.add(1, 4, 1,"Clean工程");
//		//添加第二项
//		SubMenu subMenu1= menu.addSubMenu("窗口");
//		subMenu1.add(2, 1, 1,"new Window");
//		subMenu1.add(2, 2, 1,"Editer");
//		subMenu1.add(2, 3, 1,"Show View");
//		subMenu1.add(2, 4, 1,"Preference");
		
		//布局实现
		getMenuInflater().inflate(R.menu.sub_menu, menu);

		return super.onCreateOptionsMenu(menu);
	}
	/**
	 * item 点击事件
	 */
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		
		//可以同过 id 判断
		
		Toast.makeText(getApplicationContext(),item.getTitle(),Toast.LENGTH_LONG).show();
		
		return super.onOptionsItemSelected(item);
	}




5.ContextMenu 上下文菜单实现

    5.1 ContextMenu 菜单效果图

                                                             


     5.2 静态实现 布局

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/context_item1"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="我是xml"/>
    <item
        android:id="@+id/context_item2"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="我是xml2"/>
    <item
        android:id="@+id/context_item3"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="我是xml3"/>
    <item
        android:id="@+id/context_item4"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="我是xml4"/>

</menu>

   5.3 业务实现

/**
	 * 重新 onCreateContextMenu 添加菜单
	 */
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// 重写 ContextMenu 方法
		// 动态加载
		menu.add(1, 1, 1, "干嘛");
		menu.add(1, 2, 1, "哇哦");
		menu.add(1, 3, 1, "咳咳");
		menu.add(1, 4, 1, "哈哈");
		
		//布局添加
		getMenuInflater().inflate(R.menu.context_menu, menu);

		super.onCreateContextMenu(menu, v, menuInfo);
	}
	
	
	/**
	 * 菜单 项点击事件
	 */
	@Override
	public boolean onContextItemSelected(MenuItem item) {
		textView1.setText(item.getItemId()+" | "+item.getTitle());
		//判断 点击的id , 不同的操作使用 switch
		switch (item.getItemId()) {
		case 1:
			Toast.makeText(getApplicationContext(),"我就是要"+item.getTitle(),Toast.LENGTH_SHORT).show();
			break;
		case 2:
			Toast.makeText(getApplicationContext(),"你快看"+item.getTitle(),Toast.LENGTH_SHORT).show();
			break;
		case 3:
			Toast.makeText(getApplicationContext(),"老头子!"+item.getTitle(),Toast.LENGTH_SHORT).show();
			break;
		case 4:
			Toast.makeText(getApplicationContext(),"你是。。。!"+item.getTitle(),Toast.LENGTH_SHORT).show();
			break;
		case R.id.context_item1:
			Toast.makeText(getApplicationContext(),"context_item1",Toast.LENGTH_SHORT).show();
			break;
		case  R.id.context_item2:
			Toast.makeText(getApplicationContext(),"context_item2",Toast.LENGTH_SHORT).show();
			break;
		case  R.id.context_item3:
			Toast.makeText(getApplicationContext(),"context_item3",Toast.LENGTH_SHORT).show();
			break;
		case  R.id.context_item4:
			Toast.makeText(getApplicationContext(),"context_item4",Toast.LENGTH_SHORT).show();
			break;
		
		}
		return super.onContextItemSelected(item);
	}

6.demo 免积分下载

http://download.csdn.net/detail/lablenet/9050689



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值