菜单(五)ActionMode和PopupMenu

package com.example.actionmode;

import android.app.Activity;
import android.os.Bundle;
import android.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Button button1;
	private Button button2;
	private ActionMode actionMode;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		button1 = (Button) findViewById(R.id.button1);
		button2 = (Button) findViewById(R.id.button2);
		button1.setOnLongClickListener(new OnLongClickListener() {

			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				if (actionMode != null) {
					return false;
				}
				actionMode = startActionMode(actionCallback);
				v.setSelected(true);
				return true;
			}
		});
		button2.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				PopupMenu popupMenu = new PopupMenu(MainActivity.this, v);
				popupMenu
						.setOnMenuItemClickListener(new OnMenuItemClickListener() {

							@Override
							public boolean onMenuItemClick(MenuItem item) {
								// TODO Auto-generated method stub
								switch (item.getItemId()) {
								case R.id.edit:
									edit();
									break;
								case R.id.share:
									share();
									break;
								case R.id.delete:
									delete();
									break;
								default:
									break;
								}
								return false;
							}
						});
				MenuInflater menuInflater = getMenuInflater();
				menuInflater.inflate(R.menu.main, popupMenu.getMenu());
				popupMenu.show();
				// 如果有空间,显示在view的上面,没空间显示在view的下面
			}
		});
	}

	private ActionMode.Callback actionCallback = new ActionMode.Callback() {

		@Override
		public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
			// TODO Auto-generated method stub
			return false;
		}

		@Override
		public void onDestroyActionMode(ActionMode mode) {
			// TODO Auto-generated method stub
			actionMode = null;
		}

		// 从xml加载菜单
		@Override
		public boolean onCreateActionMode(ActionMode mode, Menu menu) {
			// TODO Auto-generated method stub
			MenuInflater menuInflater = getMenuInflater();
			menuInflater.inflate(R.menu.main, menu);
			return true; // 注意这里要返回true
		}

		@Override
		public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
			// TODO Auto-generated method stub
			switch (item.getItemId()) {
			case R.id.edit:
				edit();
				break;
			case R.id.share:
				share();
				break;
			case R.id.delete:
				delete();
				break;
			default:
				break;
			}
			return false;
		}
	};

	public void edit() {
		Toast.makeText(MainActivity.this, "编辑", Toast.LENGTH_SHORT).show();
	}

	public void share() {
		Toast.makeText(MainActivity.this, "分享", Toast.LENGTH_SHORT).show();
	}

	public void delete() {
		Toast.makeText(MainActivity.this, "删除", Toast.LENGTH_SHORT).show();
	}
}

res/menu/main.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/edit"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="编辑"/>
    <item
        android:id="@+id/share"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="分享"/>
    <item
        android:id="@+id/delete"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="删除"/>

</menu>

源代码下载

时间: 02-20

菜单(五)ActionMode和PopupMenu的相关文章

弹出式菜单(下拉菜单)实现——PopupMenu

PopupMenu代表弹出式菜单,它会在指定组件上弹出PopupMenu,默认情况下,PopupMenu会显示在该组件的下方或上方.PopupMenu可增加多个菜单项,并可为菜单项增加子菜单. 使用PopupMenu创建菜单的步骤非常简单,只要如下步骤即可. 调用new PopupMenu(Context context,View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件. 调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中. 调用

delphi TDbGrid 右键 PopupMenu 菜单只在有数据的地方弹出

最近用delphi做开发,用到了DbGrid控件,想在控件上点击鼠标右键弹出菜单 关联DbGrid的 Popupmenu 倒是可以实现,但是这样的效果是不管你在哪里单击鼠标右键 只要在DBGrid里面就会弹出菜单,我想只在数据区弹出,网上查了N多了资料,没有找到满意的 偶然间发现,当在DbGrid上单击鼠标右键的时候,当鼠标在数据区的时候不会触发 MouseDown事件 这样我就想用 MouseUp和MouseDown 区分鼠标是不是在数据区 ,然后弹出菜单 首先定义一个全局变量: var Sh

Android界面编程——导航栏及菜单(六)

Android界面编程--导航栏及菜单 2.7导航栏及菜单 2.7.1  ActionBar ActionBar是Android3.0(API 11)开始增加的新特性,ActionBar出现在活动窗口的顶部,可以显示标题.icon.Actions按钮.可交互View,可实现应用程序级的导航,如图2.7-1所示 图2.7-1 其中 1. App icon: 主要用于展示App的Logo,如果当前界面不是一级界面,还可以展示返回航. 2.View Control: 用于切换不同的视图或者展示非交互信

原生js写的一个弧形菜单插件

弧形菜单是一种半弧式或者全弧形菜单,是一种不同于传统横向或者竖向菜单形式的菜单.最近在网上看到好多人写出了这种效果,于是也尝试自己写了一个. 实现方式:原生态js 主要结构: 1.参数合并 1 var defaultPra = { 2 mainMenuId: "ArcMenu",//主菜单id 3 menuBoxId:"menuBox",//菜单包裹id 4 position: "",//弧形菜单 5 customPosition:"0

纯CSS写的下拉菜单

效果图,如上图所示 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title></title>

导航菜单

导航菜单主要是由列表做出来的.不同的导航菜单还需要与<div>相结合来完成的. 一种菜单式横着的: 代码如下写: HTML: <ul>   <li><a href="#">业界</a></li>   <li><a href="#">云计算</a></li>   <li><a href="#">移动<

python第八十四天---十五周作业

后台管理页面: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>后台管理页面</title> 6 7 <style type="text/css"> 8 /*顶部菜单*/ 9 .pag-head{ 10 position: fixed; 11 z-ind

菜单、toast、对话框的使用

1.请说出android中菜单的类型? <1.选项菜单(在用户按手机上的Menu键时弹出的菜单) <2.上下文菜单(在用户长按指定的View对象超过2秒后自动弹出的菜单) <3.弹出菜单(当用户点击指定的View时弹出的菜单) 2.请说出生成选项菜单和处理选项菜单时需要重写Activity中的哪两个方法? public boolean onCreateOptionsMenu(Menu) public boolean onprepareOptionsmenu(Menu) 3.请说出生成上下

Android横向滑动菜单

1.效果图: 2.项目地址: https://github.com/lynnchurch/HorizontalScrollMenu.git 3.使用示例代码: package com.example.horizontalscrollmenusample; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.lynnchurch.horizontalscrollmenu.Bas