ActionBar---------ActionMode


ActionBar與ActionMode初體驗 

[復制鏈接]
   

18

主題

2

好友

819

積分

No.4 中級開發者

Rank: 4

升級  19.83%

精華
0
帖子
123
e幣
590 元
跳轉到指定樓層
樓主
 
  發表於 2012-11-13 19:52:12   | 只看該作者   | 倒序瀏覽
0
本帖最后由 antoon_nee 於 2012-11-13 19:51 編輯

ActionBar
1 ,先鏈接一篇csdn大牛翻譯的文章  http://blog.csdn.net/xyz_lmn/article/details/8132420 ,調理一下理論知識。

2 ,再分享一個小實例 : http://www.cnblogs.com/hanyuan/archive/2012/04/11/Android_ActionBar_AddingDrop-downNavigation.html。
      在Gallery2源碼中對ActionBar使用很多,來張Gallery2截圖感受一下。
3 ,在4.0系統中可以設置菜單項屬性android:showAsAction,菜單項放在Action Bar的右上角

    android:showAsAction值有:

    1、always:菜單項一直顯示在Action Bar上。

    2、ifRoom:如果有足夠的空間,菜單項顯示在Action Bar上。

    3、never:菜單項永遠不出現在Action Bar上。

    4、withText:菜單項和它的圖標,title一起顯示。

      來一張Gallery2截圖2看看效果。
-------------------------------------------------------------------------------------
ActionMode
1,再鏈接一篇csdn大牛翻譯的文章 http://blog.csdn.net/fireofstar/article/details/7350177。
2,使用ActionMode,它會臨時占據action bar的位置,但與ActionBar是獨立的。
         在上面ActionBar的實例基礎上增加ActionMode效果。直接上代碼(附件有完整代碼,CustomMenu.java是直接從Gallery2源碼中拿過來的):

?
代碼片段,雙擊復制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package com.example.actionbar_clustermenu;
 
import android.os.Bundle;
import android.app.ActionBar;
import android.app.ActionBar.OnNavigationListener;
import android.app.Activity;
import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.SpinnerAdapter;
 
public class MainActivity extends Activity
{
        private ActionModeHandler mActionModeHandler;
        private static final int MENU_PREFERENCES = 31 ;
         
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState){
         super .onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
 
         // 生成一個SpinnerAdapter
         SpinnerAdapter adapter = ArrayAdapter.createFromResource( this , R.array.student, android.R.layout.simple_spinner_dropdown_item);
         // 得到ActionBar
         ActionBar actionBar = getActionBar();
         // 將ActionBar的操作模型設置為NAVIGATION_MODE_LIST
         actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
         // 為ActionBar設置下拉菜單和監聽器
         actionBar.setListNavigationCallbacks(adapter, new DropDownListenser());
         
         mActionModeHandler = new ActionModeHandler( this );
    }
 
    /**
      * 實現 ActionBar.OnNavigationListener接口
      */
    class DropDownListenser implements OnNavigationListener
    {
         // 得到和SpinnerAdapter里一致的字符數組
         String[] listNames = getResources().getStringArray(R.array.student);
 
         /* 當選擇下拉菜單項的時候,將Activity中的內容置換為對應的Fragment */
         public boolean onNavigationItemSelected( int itemPosition, long itemId)
         {
             
             return true ;
         }
    }
 
        @Override
        public boolean onPrepareOptionsMenu(Menu menu) {
                super .onPrepareOptionsMenu(menu);
                menu.clear();
                menu.add( 0 , MENU_PREFERENCES, 0 , R.string.action_mode).setIcon(
                android.R.drawable.ic_menu_preferences);
                return true ;
        }
 
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
                if (MENU_PREFERENCES == item.getItemId()){
                          mActionModeHandler.startActionMode();
                }
                return super .onOptionsItemSelected(item);
        }
     
     
     
     
}


?
代碼片段,雙擊復制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package com.example.actionbar_clustermenu;
 
import android.app.Activity;
import android.view.ActionMode;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.PopupMenu.OnMenuItemClickListener;
import com.example.actionbar_clustermenu.CustomMenu.DropDownMenu;
 
public class ActionModeHandler implements ActionMode.Callback {
    private Activity  mActivity;
    private DropDownMenu mSelectionMenu;
    private boolean selectAllState = false ;
 
    public ActionModeHandler(Activity activity) {
            mActivity = activity;
    }
 
    public ActionMode startActionMode() {
         final ActionMode actionMode = mActivity.startActionMode( this );
         View customView = LayoutInflater.from(mActivity).inflate(
                R.layout.action_mode, null );
         actionMode.setCustomView(customView);
         CustomMenu customMenu = new CustomMenu(mActivity);
         mSelectionMenu = customMenu.addDropDownMenu(
                (Button) customView.findViewById(R.id.selection_menu),
                R.menu.selection);
         updateSelectionMenu();
         customMenu.setOnMenuItemClickListener( new OnMenuItemClickListener() {
             public boolean onMenuItemClick(MenuItem item) {
                return onActionItemClicked(actionMode, item);
             }
         });
         return actionMode;
    }
 
    public void setTitle(String title) {
         mSelectionMenu.setTitle(title);
    }
 
 
    public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
         if (item.getItemId() == R.id.action_select_all) {
             updateSelectionMenu();
         }
         return true ;
    }
 
    private void updateSelectionMenu() {
         // update title
         setTitle( "oh yeah" );
         if (selectAllState){
                selectAllState = false ;
         } else {
                selectAllState = true ;
         }
         // For clients who call SelectionManager.selectAll() directly, we need to ensure the
         // menu status is consistent with selection manager.
         MenuItem item = mSelectionMenu.findItem(R.id.action_select_all);
         if (item != null ) {
             if (selectAllState) {
                item.setChecked( true );
                item.setTitle(R.string.deselect_all);
             } else {
                item.setChecked( false );
                item.setTitle(R.string.select_all);
             }
         }
    }
 
    public boolean onCreateActionMode(ActionMode mode, Menu menu) {
         MenuInflater inflater = mode.getMenuInflater();
         inflater.inflate(R.menu.activity_main, menu);
         return true ;
    }
 
    public void onDestroyActionMode(ActionMode mode) {
         //leave current UI to before activity
    }
 
    public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
         return true ;
    }
 
 
}


?
代碼片段,雙擊復制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
package com.example.actionbar_clustermenu;
 
import android.content.Context;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
 
import java.util.ArrayList;
 
public class CustomMenu implements OnMenuItemClickListener {
    @SuppressWarnings ( "unused" )
    private static final String TAG = "FilterMenu" ;
 
    public static class DropDownMenu {
         private Button mButton;
         private PopupMenu mPopupMenu;
         private Menu mMenu;
 
         @SuppressWarnings ( "deprecation" )
                public DropDownMenu(Context context, Button button, int menuId,
                OnMenuItemClickListener listener) {
             mButton = button;
             mButton.setBackgroundDrawable(context.getResources().getDrawable(
                     R.drawable.dropdown_normal_holo_dark));
             mPopupMenu = new PopupMenu(context, mButton);
             mMenu = mPopupMenu.getMenu();
             mPopupMenu.getMenuInflater().inflate(menuId, mMenu);
             mPopupMenu.setOnMenuItemClickListener(listener);
             mButton.setOnClickListener( new OnClickListener() {
                public void onClick(View v) {
                     mPopupMenu.show();
                }
             });
         }
 
         public MenuItem findItem( int id) {
             return mMenu.findItem(id);
         }
 
         public void setTitle(CharSequence title) {
             mButton.setText(title);
         }
    }
 
 
 
    private Context mContext;
    private ArrayList<DropDownMenu> mMenus;
    private OnMenuItemClickListener mListener;
 
    public CustomMenu(Context context) {
         mContext = context;
         mMenus = new ArrayList<DropDownMenu>();
    }
 
    public DropDownMenu addDropDownMenu(Button button, int menuId) {
         DropDownMenu menu = new DropDownMenu(mContext, button, menuId, this );
         mMenus.add(menu);
         return menu;
    }
 
    public void setOnMenuItemClickListener(OnMenuItemClickListener listener) {
         mListener = listener;
    }
 
    public MenuItem findMenuItem( int id) {
         MenuItem item = null ;
         for (DropDownMenu menu : mMenus) {
             item = menu.findItem(id);
             if (item != null ) return item;
         }
         return item;
    }
 
    public void setMenuItemAppliedEnabled( int id, boolean applied, boolean enabled,
             boolean updateTitle) {
         MenuItem item = null ;
         for (DropDownMenu menu : mMenus) {
             item = menu.findItem(id);
             if (item != null ) {
                item.setCheckable( true );
                item.setChecked(applied);
                item.setEnabled(enabled);
                if (updateTitle) {
                     menu.setTitle(item.getTitle());
                }
             }
         }
    }
 
    public void setMenuItemVisibility( int id, boolean visibility) {
         MenuItem item = findMenuItem(id);
         if (item != null ) {
             item.setVisible(visibility);
         }
    }
 
    public boolean onMenuItemClick(MenuItem item) {
         if (mListener != null ) {
             return mListener.onMenuItemClick(item);
         }
         return false ;
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM