Android的menu有多種實現方式,之前寫過一篇Android中五種經常使用的menu(菜單),這裏介紹一種新的menu實現方式:ActionMode。ActionMode是Android 3.0之後出現的,咱們能夠使用AppCompat庫使ActionMode兼容至Android 2.1。html
Android 3.0之前,咱們處理列表的長按事件常用Context Menu,Android3.0之後,咱們有了新的選擇:ActionMode。下圖左邊效果爲Context Menu右邊效果爲ActionMode。android
Android開發者應該都熟悉Context Menu了,Context Menu是懸浮在操做項之上的視圖。ActionMode是臨時佔據了ActionBar的位置。下面給出ActionMode的實現方法。ide
使用ActionMode須要兩步驟:ui
一、實現ActionMode.Callback接口,並處理ActionMode的生命週期,ActionMode的生命週期以下圖:spa
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; } };
二、事件觸發時,調用startActionMode()方法。.net
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; } });
參考:code
http://developer.android.com/reference/android/view/ActionMode.Callback.html
htm
http://developer.android.com/guide/topics/ui/menus.htmlblog