實現自己的Contextual Action Mode

原文:http://www.cnblogs.com/JinyaoLi/p/3868719.html

實現自己的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;沒有定義標題文字顏色,由於父主題的原因標題文字白色,可以定義成黑色)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章