actionmode-ActionMode以及它的menu使用
下图左边效果为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;
}
});
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使用的更多相关文章
- Android 上下文菜单 ActionMode
public class MainActivity extends Activity { private Button button; private ActionMode actionMode; @ ...
- Android4.0 -- UI控件之 Menu 菜单的的使用(三)
上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...
- Android Menu用法全面讲解
说明:本文只介绍Android3.0及以上的Menu知识点. 菜单的分类 菜单是Android应用中非常重要且常见的组成部分,主要可以分为三类:选项菜单.上下文菜单/上下文操作模式以及弹出菜单.它们的 ...
- 低版本系统兼容的ActionBar(一)设置颜色+添加Menu+添加ActionMode
之前我一直用ActionBarSherlock这个开源项目来做ActionBar,因为它可以让低版本的设备也能用上ActionBar.但是在最新的SDK中Google提供了一个AppCompa ...
- Android新的menu实现——ActionMode
Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后 ...
- (转)Android新的menu实现——ActionMode
Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode.ActionMode是Android 3.0以后 ...
- 20150612_Andriod contextual action mode 菜单
参考地址:http://www.xuebuyuan.com/1114028.html http://www.cnblogs.com/mengdd/p/3564782.html ...
- Android EditText的使用及值得注意的地方
Android上有很多输入法应用,每种输入法都有各自的特点,输入法多数时候是和EditText配合使用,结合我自己的亲身实践分享一下使用EditText过程中遇到的一些问题及解决方法. 设置默认输入法 ...
- Android--Menus
前言 本篇博客讲解一下菜单Menu的使用.菜单在windows应用中使用十分广泛,几乎所有的windows应用都有菜单,Android中也加入了菜单的支持.从官方文档了解到,从Android3.0(A ...
随机推荐
- IPMI远程管理一点记录
http://www.07net01.com/storage_networking/IPMIyuanchengguanliyidianjilu_53093_1357975254.html
- (2) 我的结果- spec2006中精确的simulation points运行点
spec06中获取simpoints的环境说明: spec的版本号为spec2006v1.0; 使用ref input with runspec; 100millions为周期生成的simpoints ...
- iOS 一个ViewController上显示2个tableView的方法
1.在StoryBoard上创建2个tableView,并用autolayout约束. 2.在ViewController上拖进来. @property (weak, nonatomic) IBOut ...
- 记一次httpclient Connection reset问题定位
问题:某业务系统在运行一段时间后,某个API一定概率偶现Connection reset现象. 问题定位: 首先想到的是要本地复现出这个问题,但一直复现不出来. 1.根据线上问题相关日志判断应该是有部 ...
- HDU 4349 Xiao Ming's Hope 组合数学
题意:给你n,问在C(n,1),C(n,2)...C(n,n)中有多少个奇数. 比赛的时候打表看出规律,这里给一个数学上的说明. Lucas定理:A,B非负整数,p是质数,A,B化为p进制分别为a[n ...
- P1328 生活大爆炸版石头剪刀布
题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头.如果两个人出拳一样,则不分胜负.在<生活大爆炸>第二季第8 集中出现了一种石头剪刀布的升级版游戏. 升级版游戏在传统的 ...
- SVN仓库目录结构
SVN仓库目录结构Repository: trunktagsbranches trunk(主干|主线) branchs(分支) tags(标记) truck(主干|主线|主分支):是用来做主方向开发的 ...
- [Chromium文档转载,第006章]Chrome IPC To Mojo IPC Cheat Sheet
For Developers > Design Documents > Mojo > Chrome IPC To Mojo IPC Cheat Sheet 目录 1 O ...
- mpvue 开发小程序
转换成vue语法, 小程序中原生的事件用@ 原生的属性用:
- mysql分页小结
mysql.select('*').from('books') .join('cSessionInfo', 'books.openid', 'cSessionInfo.open_id') .limit ...