ActionBarSherlock学习笔记——添加组件Menu
2013-05-07 14:38
363 查看
添加功能组件
1.添加组件在onCreateOptionsMenu(Menu menu)中
@Override public boolean onCreateOptionsMenu(Menu menu) { // Used to put dark icons on light action bar boolean isLight = SampleList.THEME == R.style.Theme_Sherlock_Light; menu.add("Save") .setIcon( isLight ? R.drawable.ic_compose_inverse : R.drawable.ic_compose) .setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("Search").setShowAsAction( MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); menu.add("Refresh") .setIcon( isLight ? R.drawable.ic_refresh_inverse : R.drawable.ic_refresh) .setShowAsAction( MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT); return true; } setIcon(int res):设置图标。 add(String name):为新添加item的名字。 setActionView(R.layout.xxx):添加点击视图,同时需要在setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW). setShowAsAction(int action):item的显示方式,如下几种:
/** * 从不在ActionBar中显示,但按下menu键会在下方显示 */ public static final int SHOW_AS_ACTION_NEVER = 0; /** 由系统决定是否有多余控件来显示这个item */ public static final int SHOW_AS_ACTION_IF_ROOM = 1; /** * 会一直在ActionBar中显示,省着点用,多了会影响用户体验 */ public static final int SHOW_AS_ACTION_ALWAYS = 2; /** * 在ActionBar中显示这个item的标签,即是他有一个icon */ public static final int SHOW_AS_ACTION_WITH_TEXT = 4; /** * This item's action view collapses to a normal menu item. * When expanded, the action view temporarily takes over * a larger segment of its container.点开收索出现的那个输入框 */ public static final int SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW = 8;
添加item的第二种方式:
/** * 解析R.menu.xxx */ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); getSupportMenuInflater().inflate(R.menu.settings_action_provider, menu); return true; }
其中R.menu.xxx文件如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/menu_item_action_provider_action_bar" android:actionProviderClass="com.actionbarsherlock.sample.demos.ActionProviders$SettingsActionProvider" android:showAsAction="ifRoom"<!--设置显示的方式--!> android:title="Settings"/> <item android:id="@+id/menu_item_action_provider_overflow" android:actionProviderClass="com.actionbarsherlock.sample.demos.ActionProviders$SettingsActionProvider" android:showAsAction="never" android:title="Settings"/> </menu>
android:actionProviderClass属性用于添加创建item,布局的类
/** * 内部类用于常见OptionsItem的view布局 * * @author Administrator * */ public static class SettingsActionProvider extends ActionProvider { /** An intent for launching the system settings. */ private static final Intent sSettingsIntent = new Intent( Settings.ACTION_SETTINGS); /** Context for accessing resources. */ private final Context mContext; /** * Creates a new instance. * * @param context * Context for accessing resources. */ public SettingsActionProvider(Context context) { super(context); mContext = context; } /** * 创建布局view,并为view中的控件添加事件 */ @Override public View onCreateActionView() { // Inflate the action view to be shown on the action bar. LayoutInflater layoutInflater = LayoutInflater.from(mContext); View view = layoutInflater.inflate( R.layout.settings_action_provider, null); ImageButton button = (ImageButton) view.findViewById(R.id.button); // Attach a click listener for launching the system settings. button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mContext.startActivity(sSettingsIntent); } }); return view; } /** * 处理按钮menu弹出的menu的点击事件,并且主onOptionsItemSelected没有处理,这个点击事件,即返回的为false时,会调用这个方法 */ @Override public boolean onPerformDefaultAction() { // This is called if the host menu item placed in the overflow menu // of the // action bar is clicked and the host activity did not handle the // click. mContext.startActivity(sSettingsIntent); return true; } }
2.监听onCreateOptionsMenu中的item点击事件
/** * 监听item的点击 */ @Override public boolean onOptionsItemSelected(MenuItem item) { // TODO Auto-generated method stub Toast.makeText(this, "你点击了:" + item, Toast.LENGTH_LONG).show(); return super.onOptionsItemSelected(item); }
3.添加组件使用ActionMode,这个功能可以在没有ActionBar的情况下使用
import com.actionbarsherlock.view.ActionMode; 实例化:startActionMode(new myActionMode )
/** * 添加AcionMode,需要实现其Callback * * @author Administrator * */ private class myActionMode implements ActionMode.Callback { // 添加item @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub menu.add("New_0").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("New_1").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("New_2").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("New_3").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("New_4").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("New_5").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); menu.add("New_6").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); return true; } // create后会调用这个方法 @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub menu.add("New_7").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); return true; } // item点击事件处理 @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "你点击了:" + item, Toast.LENGTH_LONG) .show(); return true; } // ActionMode消失的时候调用的方法 @Override public void onDestroyActionMode(ActionMode mode) { // TODO Auto-generated method stub } } mode.finish();关闭这个mode invalidateOptionsMenu():重新调用onCreateOptionsMenu
4.添加ContextMenu上下文菜单
/** * 为view注册长按的上下文菜单 */ registerForContextMenu(findViewById(R.id.view0)); /** * 为上下文菜单添加item */ @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { // TODO Auto-generated method stub menu.add("New_0"); menu.add("New_1"); menu.add("New_2"); menu.add("New_3"); super.onCreateContextMenu(menu, v, menuInfo); } /** * 获得上下文菜单点击事件 */ @Override public boolean onContextItemSelected(android.view.MenuItem item) { // TODO Auto-generated method stub System.out.println(item.toString()); return super.onContextItemSelected(item); }
源码下载地址 https://github.com/JakeWharton/ActionBarSherlock
相关文章推荐
- unity里使用AddComponentMenu添加自定义组件的一个隐藏坑
- unity里使用AddComponentMenu添加自定义组件的一个隐藏坑
- 如何在基于Dialog的程序中添加menu菜单 ?
- 小白学tkinter(Menu组件(菜单))
- 用SetMenuInfo 为菜单添加更多特性
- Android动态添加menu菜单的简单方法
- android menu.addIntentOptions 添加动态菜单
- 动态添加组件或是客户端控件以及事件(Mondify By LiFuyun)
- Qt模块化笔记之Qt_Quick——用QQuickImageProvider给Image组件添加图片
- 【iOS-Cocos2d游戏开发之七】添加/删除系统组件,并解决View设置透明会影响View中的其他组件的问题! 推荐
- 世界级的javascript ajax client端UI库 Ext学习笔记 menu组件 和 toolbar组件
- 为组件添加Expires头,最大化利用浏览器缓存
- jQuery向动态添加的组件绑定事件
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 利用WhiteHose一步步建立分布式系统的框架(七)--添加组件的操作并实现分布式系统
- js框架 dwz jui 的日历组件 添加自定义事件
- Joomla(3)添加组件总结
- Ext JS添加子组件的误区
- VS2015 打包添加系统必备组件
- 在Wince的Catalog中添加驱动组件