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的生命周期如下图:


[java] view plain copy print ?
  1. private ActionMode.Callback mCallback = new ActionMode.Callback() {

  2. @Override

  3. publicboolean onPrepareActionMode(ActionMode mode, Menu menu) {

  4. returnfalse;

  5. }

  6. @Override

  7. publicvoid onDestroyActionMode(ActionMode mode) {

  8. // TODO Auto-generated method stub

  9. }

  10. @Override

  11. publicboolean onCreateActionMode(ActionMode mode, Menu menu) {

  12. MenuInflater inflater = mode.getMenuInflater();

  13. inflater.inflate(R.menu.actionmode, menu);

  14. returntrue;

  15. }

  16. @Override

  17. publicboolean onActionItemClicked(ActionMode mode, MenuItem item) {

  18. boolean ret = false;

  19. if (item.getItemId() == R.id.actionmode_cancel) {

  20. mode.finish();

  21. ret = true;

  22. }

  23. return ret;

  24. }

  25. };




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


[java] view plain copy print ?
  1. someView.setOnLongClickListener(new View.OnLongClickListener() {

  2. // Called when the user long-clicks on someView

  3. publicboolean onLongClick(View view) {

  4. if (mActionMode != null) {

  5. returnfalse;

  6. }

  7. // Start the CAB using the ActionMode.Callback defined above

  8. mActionMode = getActivity().startActionMode(mActionModeCallback);

  9. view.setSelected(true);

  10. returntrue;

  11. }

  12. });







/** * @author 张兴业 * http://blog.csdn.net/xyz_lmn * 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. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. Android(安卓)下使用 JSON 实现 HTTP 请求,外加几个示例!
  4. Android的MediaRecorder架构介绍
  5. Android中Animator & Animation比较
  6. 《Android(安卓)复杂的列表视图新写法 MultiType》知识点整理
  7. 基于RTP和Android的视频传输的研究实现方法
  8. 使用NanoHttpd在Android上实现HttpServer
  9. [置顶] Android--纠正Activity横竖屏切换的生命周期的错误

随机推荐

  1. Android(安卓)检测正在运行的service
  2. android背景模糊化处理
  3. Android:Samsung Android(安卓)devices r
  4. android 检测是否有网络连接
  5. Android(安卓)Material Design 之 Coordi
  6. Android下滑条ScrollView
  7. Android之Fragment界面布局实例
  8. 【Android(安卓)Studio】Resource Mergin
  9. android的Drawable
  10. ch08 Android(安卓)Intent