Android中Option menu和Context menu的使用(十六)

原创 2015年11月19日 10:06:58

       Menu由两种形式,Option menu和Context menu。前者是按下设备的Menu硬按钮弹出,后者是长按widget弹出。

1、Option Menu:当我们按下Menu的硬件按钮时,Option Menu将被触发显示,最多可以显示6个选项的icon菜单,

如果选项多于6个,第6个选项显示为“More“,点击可以进入扩展菜单。

步骤1:创建Menu

步骤2:Menu触发比较简单,Activity在Memu后会触发onOptionsItemSelected()进行处理。               

步骤3:每次显示menu时根据实际的情况进行适配

步骤4:子菜单,Android支持二级菜单,但是不支持三级等多级菜单。子菜单设置如下,在onCreateOptionsMenu(),

2、Context Menu:Context Menu是用户手指长按某个View触发的菜单。

步骤1:为某个view注册ContextMenu,例如在我们的例子中,在onCreate()中对整个ListView进行处理:

步骤2:创建ContextMenu,通过Override onCreateContextMenu()来创建Context Menu。

步骤3:点击菜单触发函数,触发onContextItemSelected()。


代码片段:

package com.itarchy.menu;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
/**
 * 
 * @author:itarchy
 * @E-mail:itarchy@163.com
 * @data:2015-11-19上午10:26:37
 * @version:
 * @Des:
 */
public class HomeActivity extends Activity {

	private Button btn_op;
	private Button btn_Ct;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		btn_op = (Button) this.findViewById(R.id.btn_op);
		btn_op.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startActivity(new Intent(HomeActivity.this,
						OptionMenuActivity.class));

			}
		});
		btn_Ct = (Button) this.findViewById(R.id.btn_ct);
		btn_Ct.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				startActivity(new Intent(HomeActivity.this,
						ContextMenuActivity.class));

			}
		});

	}
}
<RelativeLayout 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"
    tools:context=".OptionMenuActivity" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:text="菜单"
        android:textSize="30sp" />

    <Button
        android:id="@+id/btn_op"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/title"
        android:text="选项菜单和子菜单"
        android:textSize="20sp" />

    <Button
        android:id="@+id/btn_ct"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/btn_op"
        android:text="上下文菜单"
        android:textSize="20sp" />

</RelativeLayout>
package com.itarchy.menu;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class OptionMenuActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.op_main);
	}

	// 创建选菜单
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// 1、方式一、通过一个MenuInflater把在XML布局文件中定义好的菜单样式应用在菜单上
		/* getMenuInflater().inflate(R.menu.main, menu); */
		// 2、方式二:
		// 直接在Java代码中使用add()方法逐个添加菜单项
		menu.add(Menu.NONE, 0, Menu.NONE, "设置").setIcon(R.drawable.qq);
		menu.add(Menu.NONE, 1, Menu.NONE, "添加").setIcon(R.drawable.qq_kong);
		// 给第三项添加子菜单
		SubMenu subMenu = menu.addSubMenu(Menu.NONE, 2, Menu.NONE, "子菜单1")
				.setIcon(R.drawable.qq);
		subMenu.setHeaderIcon(R.drawable.qq_kong);
		subMenu.setHeaderTitle("子菜单标题");
		subMenu.add(Menu.NONE, 112, Menu.NONE, "子菜单1");
		subMenu.add(Menu.NONE, 113, Menu.NONE, "子菜单2");
		subMenu.add(Menu.NONE, 114, Menu.NONE, "子菜单3");
		subMenu.add(Menu.NONE, 115, Menu.NONE, "子菜单4");

		menu.add(Menu.NONE, 3, Menu.NONE, "图库").setIcon(R.drawable.qq);
		menu.add(Menu.NONE, 4, Menu.NONE, "相机").setIcon(R.drawable.qq_kong);
		menu.add(Menu.NONE, 5, Menu.NONE, "音乐").setIcon(R.drawable.qq);
		menu.add(Menu.NONE, 6, Menu.NONE, "蓝牙").setIcon(R.drawable.qq_kong);
		menu.add(Menu.NONE, 7, Menu.NONE, "个人中心");
		return true;
	}

	// 点击菜单的items时执行
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		Toast.makeText(getApplication(),
				item.getTitle() + "," + (item.getItemId() + ""), 100).show();
		switch (item.getItemId()) {
		case 0:
			// 处理"设置"
			break;
		case 1:
			// 处理"添加"
			break;
		}
		return super.onOptionsItemSelected(item);
	}

}
<RelativeLayout 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"
    tools:context=".OptionMenuActivity" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="30sp"
        android:text="选项菜单和子菜单" />

</RelativeLayout>
package com.itarchy.menu;

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 ContextMenuActivity extends Activity {

	private TextView tvMenu;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.ct_main);

		tvMenu = (TextView) this.findViewById(R.id.title);
		this.registerForContextMenu(tvMenu);

	}

	// 创建上下文菜单
	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {

		menu.add(Menu.NONE, 0, Menu.NONE, "设置").setIcon(R.drawable.qq);
		menu.add(Menu.NONE, 1, Menu.NONE, "添加").setIcon(R.drawable.qq_kong);

		// 给第三项添加子菜单
		SubMenu subMenu = menu.addSubMenu(Menu.NONE, 2, Menu.NONE, "子菜单1")
				.setIcon(R.drawable.qq);
		subMenu.setHeaderIcon(R.drawable.qq_kong);
		subMenu.setHeaderTitle("子菜单标题");
		subMenu.add(Menu.NONE, 112, Menu.NONE, "子菜单1");
		subMenu.add(Menu.NONE, 113, Menu.NONE, "子菜单2");
		subMenu.add(Menu.NONE, 114, Menu.NONE, "子菜单3");
		subMenu.add(Menu.NONE, 115, Menu.NONE, "子菜单4");

		menu.add(Menu.NONE, 3, Menu.NONE, "图库").setIcon(R.drawable.qq);
		menu.add(Menu.NONE, 4, Menu.NONE, "相机").setIcon(R.drawable.qq_kong);
		menu.add(Menu.NONE, 5, Menu.NONE, "音乐").setIcon(R.drawable.qq);
		menu.add(Menu.NONE, 6, Menu.NONE, "蓝牙").setIcon(R.drawable.qq_kong);
		menu.add(Menu.NONE, 7, Menu.NONE, "个人中心");

		super.onCreateContextMenu(menu, v, menuInfo);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		Toast.makeText(getApplication(),
				item.getTitle() + "," + (item.getItemId() + ""), 100).show();
		switch (item.getItemId()) {
		case 0:
			// 处理"设置"
			break;
		case 1:
			// 处理"添加"
			break;
		}
		return super.onContextItemSelected(item);
	}
}
<RelativeLayout 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"
    tools:context=".OptionMenuActivity" >

    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:textSize="30sp"
        android:text="上下文菜单" />

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.itarchy.menu"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.itarchy.menu.HomeActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name="com.itarchy.menu.OptionMenuActivity" />
        <activity android:name="com.itarchy.menu.ContextMenuActivity" />
    </application>

</manifest>









版权声明:本文为博主原创文章,未经博主允许不得转载,微信号:itarchy

Android用户界面菜单之上下文菜单(Context Menu)

Android系统为我们提供了丰富的可视化用户界面组件,包括菜单、对话框、按钮、下拉列表等。Android系统借用了Java里的UI设计思想,包括事件响应机制和布局管理。Android系统中的所有UI...

android 单击弹出Context menu

Context menu默认要long click才会触发。 以下方法使单击也能触发 public void onCreateContextMenu(ContextMenu menu, Vi...

Android之ContextMenu的使用方法以及与OptionMenu的区别

>> ContextMenu是android的context menu上下文菜单,选择某项VIEW后长按menu键,就会显示出来。比如EditeText就可以通过长按来弹出拥有“cut”,"copy"...

关于github开源项目Context-Menu.Android详解

You can easily add awesome animated context menu to your app. Check this project on dribbble C...

Option Menu && Context Menu的使用

main.xml

Android简明开发教程十三:Option Menu 画笔示例

引路蜂二维图形画笔(Pen)示例含有四个示例,Lines ,Dashes ,LineJoin 和LineCap。打算采用Option Menu(主菜单)的方式来选择不同示例。 首先要对Guidebe...

Android用户界面菜单之选项菜单(Option Menu)

Android系统为我们提供了丰富的可视化用户界面组件,包括菜单、对话框、按钮、下拉列表等。Android系统借用了Java里的UI设计思想,包括事件响应机制和布局管理。Android系统中的所有UI...

Android简明开发教程十三:Option Menu 画笔示例

引路蜂二维图形画笔(Pen)示例含有四个示例,Lines ,Dashes ,LineJoin 和LineCap。打算采用Option Menu(主菜单)的方式来选择不同示例。首先要对GuidebeeG...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中Option menu和Context menu的使用(十六)
举报原因:
原因补充:

(最多只允许输入30个字)