實現自己的Contextual Action Mode
一種4.0後新的顯示menu的方式,將Menu顯示在ActionBar上。
如果TextView設置了(API11)
android:textIsSelectable="true"
那麼在你長按TextView就會顯示
我們可以自己實現這個ActionMode,並自定義它的樣式。
爲一個獨立的View實現contextual action mode,有兩步:
1.實現ActionMode.Callback接口。
2.當你想要顯示ActionMode時,運行startActionMode()(or getActivity().startActionMode() for a fragment)
1.實現ActionMode.Callback接口。
1 //用來標記ActionMode和做出相關設置 2 private ActionMode mActionMode; 3 private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { 4 // Called each time the action mode is shown. Always called after onCreateActionMode, but 5 // may be called multiple times if the mode is invalidated. 6 @Override 7 public boolean onPrepareActionMode(ActionMode arg0, Menu arg1) { 8 // TODO Auto-generated method stub 9 return false; 10 } 11 // Called when the user exits the action mode 12 @Override 13 public void onDestroyActionMode(ActionMode arg0) { 14 // TODO Auto-generated method stub 15 Toast.makeText(getApplicationContext(), "Action Mode Closed",Toast.LENGTH_SHORT).show(); 16 mActionMode = null; 17 } 18 // Called when the action mode is created; startActionMode() was called 19 @Override 20 public boolean onCreateActionMode(ActionMode mode, Menu menu) { 21 // TODO Auto-generated method stub 22 MenuInflater inflater = mode.getMenuInflater(); 23 inflater.inflate(R.menu.main_context_menu, menu); 24 return true; 25 } 26 // Called when the user selects a contextual menu item 27 @Override 28 public boolean onActionItemClicked(ActionMode arg0, MenuItem arg1) { 29 // TODO Auto-generated method stub 30 int id = arg1.getItemId(); 31 32 return false; 33 } 34 };
2.運行startActionMode()
1 mActionMode = startSupportActionMode(mActionModeCallback); 2 mActionMode.setTitle("contextual action mode");
運行startActionMode()之後會得到一個ActionMode對象,可以通過這個對象來實現設置標題,finish 當前的ActionMode等操作。
接下來,我們可以自定義ActionMode的樣式,包括刪除CloseButton旁邊的Divider。
1 <style name="MyActionBarTheme" parent="@style/Theme.AppCompat.Light"> 2 <item name="android:actionBarStyle">@style/MyActionBar</item> 3 <item name="android:actionModeCloseDrawable">@drawable/ic_launcher</item> 4 <item name="android:actionModeBackground">@color/yellow</item> 5 6 <!-- ActionMode右邊的按鈕是一個特殊的CloseButton,分割線與CloseButton的Style有關 --> 7 <!-- 刪除ActionMode的Divider--> 8 <item name="android:actionModeCloseButtonStyle">@null</item> 9 </style> 10 11 <style name="MyActionBar" parent="@style/Widget.AppCompat.ActionBar"> 12 <item name="android:background">@color/green</item> 13 </style>
效果:
可兼容2.1(雖然虛擬機是2.3;沒有定義標題文字顏色,由於父主題的原因標題文字白色,可以定義成黑色)