Android的menu有多种实现方式,以前写过一篇Android中五种常用的menu(菜单),这里介绍一种新的menu实现方式:ActionMode。ActionMode是Android 3.0以后出现的,我们可以使用AppCompat库使ActionMode兼容至Android 2.1。

Android 3.0以前,我们处理列表的长按事件经常使用Context Menu,Android3.0以后,我们有了新的选择:ActionMode。下图左边效果为Context Menu右边效果为ActionMode。

Android开发者应该都熟悉Context Menu了,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;
}
});
/**
* @author 张兴业
*  iOS入门群:83702688
*  android开发进阶群:241395671
*  我的新浪微博:@张兴业TBOW
*/

参考:

http://developer.android.com/reference/android/view/ActionMode.Callback.html

http://developer.android.com/guide/topics/ui/menus.html

最新文章

  1. SSE: server-sent events
  2. ListBox1控件
  3. JSON (仅限本地)
  4. error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7
  5. java开发规范总结_命名规范
  6. 【czy系列赛】czy的后宫6 && bzoj1044 [HAOI2008]木棍分割
  7. VLC的相关文档以及javascript接口
  8. 使用QGIS将文本坐标转换为矢量文件
  9. Tar专题
  10. codeforces#1154F. Shovels Shop (dp)
  11. Calendar用法随笔
  12. 离线提取域控HASH的方法
  13. HIS系统结算后,没有更新单据状态为“已结算”
  14. React Native 异步存储
  15. help2man: can't get `--help' info from automake-1.15 Try `--no-discard-stderr' if option outputs to stderr Makefile:3687: recipe for target 'doc/automake-1.15.1' failed
  16. Spring JavaConfig
  17. 简单了解一下什么是Django或者说Django是做什么的?
  18. 服务器对cookie信息加密
  19. Android studio 使用NDK工具实现JNI编程
  20. CF1155D Beautiful Array(动态规划)

热门文章

  1. C++实现对数学基本运算表达式的解析
  2. C语言-常用函数处理
  3. sql 语句中 id&lt ;SELECT * FROM t_blog WHERE id<#{id} ORDER BY id DESC LIMIT 1
  4. 阿里云视频服务SDK
  5. angular绑定数据 使用循环输出列表数据
  6. EF、MySQL、MVC、WebAPI2 swagger 集成
  7. 删除MYSQL账号多于的空用户
  8. oblique perspective projection
  9. 1.GCC编译过程
  10. redis源码学习_整数集合