ActionBarSherlock学习笔记——添加组件Menu

添加功能组件

1.添加组件在onCreateOptionsMenu(Menu menu)中

 1 @Override
 2     public boolean onCreateOptionsMenu(Menu menu) {
 3         // Used to put dark icons on light action bar
 4         boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light;
 5 
 6         menu.add("Save")
 7                 .setIcon(
 8                         isLight ? R.drawable.ic_compose_inverse
 9                                 : R.drawable.ic_compose)
10                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
11 
12         menu.add("Search").setShowAsAction(
13                 MenuItem.SHOW_AS_ACTION_IF_ROOM
14                         | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
15 
16         menu.add("Refresh")
17                 .setIcon(
18                         isLight ? R.drawable.ic_refresh_inverse
19                                 : R.drawable.ic_refresh)
20                 .setShowAsAction(
21                         MenuItem.SHOW_AS_ACTION_IF_ROOM
22                                 | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
23 
24         return true;
25     }
setIcon(int res):设置图标。
add(String name):为新添加item的名字。
setActionView(R.layout.xxx):添加点击视图,同时需要在setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW).

setShowAsAction(int action):item的显示方式,如下几种:
 1 /**
 2      *  从不在ActionBar中显示,但按下menu键会在下方显示 */
 3     public static final int SHOW_AS_ACTION_NEVER = 0;
 4     /** 由系统决定是否有多余控件来显示这个item */
 5     public static final int SHOW_AS_ACTION_IF_ROOM = 1;
 6     /**
 7      * 会一直在ActionBar中显示,省着点用,多了会影响用户体验
 8      */
 9     public static final int SHOW_AS_ACTION_ALWAYS = 2;
10 
11     /**
12      * 在ActionBar中显示这个item的标签,即是他有一个icon
13      */
14     public static final int SHOW_AS_ACTION_WITH_TEXT = 4;
15 
16     /**
17      * This item's action view collapses to a normal menu item.
18      * When expanded, the action view temporarily takes over
19      * a larger segment of its container.点开收索出现的那个输入框
20      */
21     public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;

添加item的第二种方式:

1 /**
2      * 解析R.menu.xxx
3      */
4     @Override
5     public boolean onCreateOptionsMenu(Menu menu) {
6         super.onCreateOptionsMenu(menu);
7         getSupportMenuInflater().inflate(R.menu.settings_action_provider, menu);
8         return true;
9     }

其中R.menu.xxx文件如下:

 1 <menu xmlns:android="http://schemas.android.com/apk/res/android" >
 2 
 3     <item
 4         android:id="@+id/menu_item_action_provider_action_bar"
 5         android:actionProviderClass="com.actionbarsherlock.sample.demos.ActionProviders$SettingsActionProvider"
 6         android:showAsAction="ifRoom"<!--设置显示的方式--!>
 7         android:title="Settings"/>
 8     <item
 9         android:id="@+id/menu_item_action_provider_overflow"
10         android:actionProviderClass="com.actionbarsherlock.sample.demos.ActionProviders$SettingsActionProvider"
11         android:showAsAction="never"
12         android:title="Settings"/>
13 
14 </menu>
android:actionProviderClass属性用于添加创建item,布局的类
 1 /**
 2      * 内部类用于常见OptionsItem的view布局
 3      * 
 4      * @author Administrator
 5      * 
 6      */
 7     public static class SettingsActionProvider extends ActionProvider {
 8 
 9         /** An intent for launching the system settings. */
10         private static final Intent sSettingsIntent = new Intent(
11                 Settings.ACTION_SETTINGS);
12 
13         /** Context for accessing resources. */
14         private final Context mContext;
15 
16         /**
17          * Creates a new instance.
18          * 
19          * @param context
20          *            Context for accessing resources.
21          */
22         public SettingsActionProvider(Context context) {
23             super(context);
24             mContext = context;
25         }
26 
27         /**
28          * 创建布局view,并为view中的控件添加事件
29          */
30         @Override
31         public View onCreateActionView() {
32             // Inflate the action view to be shown on the action bar.
33             LayoutInflater layoutInflater = LayoutInflater.from(mContext);
34             View view = layoutInflater.inflate(
35                     R.layout.settings_action_provider, null);
36             ImageButton button = (ImageButton) view.findViewById(R.id.button);
37             // Attach a click listener for launching the system settings.
38             button.setOnClickListener(new View.OnClickListener() {
39                 @Override
40                 public void onClick(View v) {
41                     mContext.startActivity(sSettingsIntent);
42                 }
43             });
44             return view;
45         }
46 
47         /**
48          * 处理按钮menu弹出的menu的点击事件,并且主onOptionsItemSelected没有处理,这个点击事件,即返回的为false时,会调用这个方法
49          */
50         @Override
51         public boolean onPerformDefaultAction() {
52             // This is called if the host menu item placed in the overflow menu
53             // of the
54             // action bar is clicked and the host activity did not handle the
55             // click.
56             mContext.startActivity(sSettingsIntent);
57             return true;
58         }
59     }

2.监听onCreateOptionsMenu中的item点击事件

1 /**
2      * 监听item的点击
3      */
4     @Override
5     public boolean onOptionsItemSelected(MenuItem item) {
6         // TODO Auto-generated method stub
7         Toast.makeText(this, "你点击了:" + item, Toast.LENGTH_LONG).show();
8         return super.onOptionsItemSelected(item);
9     }

3.添加组件使用ActionMode,这个功能可以在没有ActionBar的情况下使用

 import com.actionbarsherlock.view.ActionMode;
实例化:startActionMode(new
myActionMode )
 1 /**
 2      * 添加AcionMode,需要实现其Callback
 3      * 
 4      * @author Administrator
 5      * 
 6      */
 7     private class myActionMode implements ActionMode.Callback {
 8         // 添加item
 9         @Override
10         public boolean onCreateActionMode(ActionMode mode, Menu menu) {
11             // TODO Auto-generated method stub
12             menu.add("New_0").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
13             menu.add("New_1").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
14             menu.add("New_2").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
15             menu.add("New_3").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
16             menu.add("New_4").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
17             menu.add("New_5").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
18             menu.add("New_6").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
19             return true;
20         }
21 
22         // create后会调用这个方法
23         @Override
24         public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
25             // TODO Auto-generated method stub
26             menu.add("New_7").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
27             return true;
28         }
29 
30         // item点击事件处理
31         @Override
32         public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
33             // TODO Auto-generated method stub
34             Toast.makeText(MainActivity.this, "你点击了:" + item, Toast.LENGTH_LONG)
35                     .show();
36             return true;
37         }
38 
39         // ActionMode消失的时候调用的方法
40         @Override
41         public void onDestroyActionMode(ActionMode mode) {
42             // TODO Auto-generated method stub
43         }
44     }
mode.finish();关闭这个mode
invalidateOptionsMenu():重新调用onCreateOptionsMenu

4.添加ContextMenu上下文菜单

 1     /**
 2      * 为view注册长按的上下文菜单
 3      */
 4     registerForContextMenu(findViewById(R.id.view0));
 5     /**
 6      * 为上下文菜单添加item
 7      */
 8     @Override
 9     public void onCreateContextMenu(ContextMenu menu, View v,
10             ContextMenuInfo menuInfo) {
11         // TODO Auto-generated method stub
12         menu.add("New_0");
13         menu.add("New_1");
14         menu.add("New_2");
15         menu.add("New_3");
16         super.onCreateContextMenu(menu, v, menuInfo);
17     }
18 
19     /**
20      * 获得上下文菜单点击事件
21      */
22     @Override
23     public boolean onContextItemSelected(android.view.MenuItem item) {
24         // TODO Auto-generated method stub
25         System.out.println(item.toString());
26         return super.onContextItemSelected(item);
27     }

 源码下载地址 https://github.com/JakeWharton/ActionBarSherlock

原文地址:https://www.cnblogs.com/qinghuaideren/p/3064729.html