下图左边效果为Context Menu右边效果为ActionMode。

ActionMode 其实就是替换在actionbar的位置上显示的一个控件。它跟actionbar一样,也是一种导航作用。只不过它可以根据情况需要,适当的显示跟隐藏。

下面我们就研究一下它的具体使用。

Context Menu是悬浮在操作项之上的视图;

ActionMode是临时占据了ActionBar的位置

下面给出ActionMode的实现方法。

使用ActionMode需要两步骤:

1、实现ActionMode.Callback接口,并处理ActionMode的生命周期,ActionMode的生命周期如下图:

 
private ActionMode.Callback mCallback = new ActionMode.Callback() {
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
// TODO Auto-generated method stub
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
MenuInflater inflater = mode.getMenuInflater();
inflater.inflate(R.menu.actionmode, menu);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
boolean ret = false;
if (item.getItemId() == R.id.actionmode_cancel) {
mode.finish();
ret = true;
}
return ret;
}
};

2、事件触发时,调用startActionMode()方法。

someView.setOnLongClickListener(new View.OnLongClickListener() {
// Called when the user long-clicks on someView
public boolean onLongClick(View view) {
if (mActionMode != null) {
return false;
}
// Start the CAB using the ActionMode.Callback defined above
mActionMode = getActivity().startActionMode(mActionModeCallback);
view.setSelected(true);
return true;
}
});
以上内容转载自:http://blog.csdn.net/xyz_lmn/article/details/12754785
下面我根据上面的知识点写个小demo,进行验证、总结
直接上代码
package com.example.alert;

import android.R.anim;
import android.app.Activity;
import android.os.Bundle; import android.util.Log;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView; public class HeadSetActivity extends Activity {
private ImageButton imageButton;
private ActionMode actionMode; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageButton = (ImageButton) findViewById(R.id.bt); imageButton.setOnClickListener(new View.OnClickListener() { @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub actionMode = startActionMode(mCallback); }
});
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub menu.add(1, 2, 0, "aaa");
return super.onCreateOptionsMenu(menu);
} private ActionMode.Callback mCallback = new ActionMode.Callback() { @Override
public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) {
// TODO Auto-generated method stub
Log.e("123", "onPrepareActionMode");
return false;
} @Override
public void onDestroyActionMode(ActionMode arg0) {
// TODO Auto-generated method stub
//调用finish方法的时候,会执行这个函数(也就是actionMode消失的时候)
Log.e("123", "onDestroyActionMode");
} @Override
public boolean onCreateActionMode(ActionMode arg0, Menu arg1) { // TODO Auto-generated method stub
Log.e("123", "onCreateActionMode");
//添加布局文件
ViewGroup v = (ViewGroup) LayoutInflater.from(HeadSetActivity.this)
.inflate(R.layout.action_mode, null); arg0.setCustomView(v);
//添加menu,如果内容过多,自动放到more 按钮里面,跟actionbar类似
MenuInflater inflater = arg0.getMenuInflater();
inflater.inflate(R.menu.main, arg1); //如果返回false,actionmode 不会显示
return true;
} @Override
public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) {
// TODO Auto-generated method stub
Log.e("123", "onActionItemClicked|item==="+arg1.getItemId());
//这个就是专门用来处理menu点击事件的 return false;
}
};
}

当我们点击按钮以及menu的时候

打印结果
   - ::09.335: E/(): onCreateActionMode
- ::09.345: E/(): onPrepareActionMode
- ::13.155: E/(): onDestroyActionMode
- ::13.175: E/(): onCreateActionMode
- ::13.175: E/(): onPrepareActionMode
- ::17.215: E/(): onActionItemClicked|item===
- ::20.215: E/(): onActionItemClicked|item===
- ::21.215: E/(): onPrepareActionMode
- ::22.815: E/(): onActionItemClicked|item===

效果图

从上面的打印结果我们知道,每一次启动startActionMode(),系统都会先销毁前一个。

如果我们想主动隐藏actionmode,我们可以使用

actionMode.finish();

方法

 

actionmode-ActionMode以及它的menu使用的更多相关文章

  1. Android 上下文菜单 ActionMode

    public class MainActivity extends Activity { private Button button; private ActionMode actionMode; @ ...

  2. Android4.0 -- UI控件之 Menu 菜单的的使用(三)

    上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...

  3. Android Menu用法全面讲解

    说明:本文只介绍Android3.0及以上的Menu知识点. 菜单的分类 菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单.上下文菜单/上下文操作模式以及弹出菜单.它们的 ...

  4. 低版本系统兼容的ActionBar(一)设置颜色+添加Menu+添加ActionMode

        之前我一直用ActionBarSherlock这个开源项目来做ActionBar,因为它可以让低版本的设备也能用上ActionBar.但是在最新的SDK中Google提供了一个AppCompa ...

  5. Android新的menu实现——ActionMode

    Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后 ...

  6. (转)Android新的menu实现——ActionMode

    Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后 ...

  7. 20150612_Andriod contextual action mode 菜单

    参考地址:http://www.xuebuyuan.com/1114028.html              http://www.cnblogs.com/mengdd/p/3564782.html ...

  8. Android EditText的使用及值得注意的地方

    Android上有很多输入法应用,每种输入法都有各自的特点,输入法多数时候是和EditText配合使用,结合我自己的亲身实践分享一下使用EditText过程中遇到的一些问题及解决方法. 设置默认输入法 ...

  9. Android--Menus

    前言 本篇博客讲解一下菜单Menu的使用.菜单在windows应用中使用十分广泛,几乎所有的windows应用都有菜单,Android中也加入了菜单的支持.从官方文档了解到,从Android3.0(A ...

随机推荐

  1. Unity Camera中心点的偏移

    在VR 中,如果镜片的中心轴,和屏幕的中心轴不在一条线上, 就会出现无论如何调节IPD,看到的图像都不清晰,这时候,要修改Camera的投影矩阵, 只需要一句代码就能搞定: Camera.main.p ...

  2. Android笔记---Intent实现Activity跳转

    学了之前的Android控件以及布局,我们就能够做一些UI的设计了,这里我结合之前的知识.以一个小的登录项目来解说下Activity之间跳转. 先看下效果图: 1.登录界面: 2.点击登录按钮跳转到另 ...

  3. [Python] Histograms for analysis Daily return

    A histogram is an accurate representation of the distribution of numerical data. Y axis is the occur ...

  4. hdu 3547 DIY Cube (Ploya定理)

    DIY Cube Time Limit: 2000/2000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total S ...

  5. vim使用(二):经常使用功能

    1. vim经常使用功能 vim的经常使用功能.包含块的选择.复制,多文件的编辑.多窗体等功能. 2. vim块选择 块选择是将文档中的一块能够选择复制,粘贴,不用整行的处理. 按下 v , V . ...

  6. php实现简单算法2

    php实现简单算法2 去弄php手册,里面有数据结构,有数据结构就好办了,我的算法基础那么好. 而且的话有数据结构的话再配合我脑中的那些算法了,我就都ok啦. 在手册里面搜索php数据结构就好 路径如 ...

  7. SOAPUI使用

    简介:在开发接口的时候每次验证接口是否正确都需要手动写测试DEMO来验证,使用SOAPUI可以大大减少测试时间. 目录 1.SOPUI介绍... 1 2.SOAPUI使用... 1 2.1新建SOAP ...

  8. POJ2823 单调队列

    POJ2823 http://poj.org/problem?id=2823 最基础的单调队列,说是数据结构,其实就是一种更新数组数据的方法. 之前还准备用deque,超时了,直接head,tail快 ...

  9. java.util.logging.FileHandler

    java.util.logging.FileHandler java自带的日志功能,FileHandler可以写日志到文件系统,并且自己维护日志的增删,比c++不知道强多少 FileHandler(f ...

  10. 打印机共享为什么老是出现“操作无法完成(错误 0X00000709)。再次检查打印机名称、并确保打印机连接网络

    这个情况应该是访问IP连接打印机才会出现的.解决办法:不使用IP访问,使用网上邻居找计算机名称再连接打印机即可. ------------------------------------------- ...