您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: