在上一篇博客中,已经简单介绍了ActionBar的一个常用控件SearchView,在本篇博文中,我将给大家介绍另一个常用控件:菜单。
系统运行效果图:
实现思路:
- 重写onCreateOptionsMenu;
- 构建MenuItem;
- 为MenuItem添加事件。
在正式展示代码之前,先介绍showAsAction属性。该属性定义了菜单的显示方式。包括ifRoom等5个属性:
- ifRoom:如果ActionBar还有空间,则显示其中;
- withText:显示标题,由android:title设置;
- never:从不显示;
- always:一直显示;
- collapseActionView。
通过上述几个属性,可以方便的控制菜单的显示状态。
以下部分就是用代码和引用xml两种形式,将菜单展示在ActionBar上:
/**
* ActionBar菜单(自定义)
*
* @author 小孩子a
*
* */
public class ActionBar_ShowAsAction extends Activity {
private TextView mTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.actionbar_showasaction);
mTV = (TextView) findViewById(R.id.ab_saa_result);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// addMenuFromCode(menu);
addMenuFromXML(menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
mTV.setText(item.getTitle());
return super.onOptionsItemSelected(item);
}
/**
* 通过代码添加菜单项
* */
private void addMenuFromCode(Menu menu) {
MenuItem compose = menu.add("edit");
MenuItem refresh = menu.add("refresh");
MenuItem search = menu.add("search");
MenuItem share = menu.add("share");
compose.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
compose.setIcon(R.drawable.ic_compose);
refresh.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
refresh.setIcon(R.drawable.ic_refresh);
search.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
search.setIcon(R.drawable.ic_search);
share.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
share.setIcon(R.drawable.ic_title_share_default);
}
/**
* 通过XML添加菜单项
* */
private void addMenuFromXML(Menu menu) {
getMenuInflater().inflate(R.menu.menu_ab_saa, menu);
MenuItem edit = menu.findItem(R.id.ab_saa_edit);
MenuItem refresh = menu.findItem(R.id.ab_saa_refresh);
MenuItem find = menu.findItem(R.id.ab_saa_find);
MenuItem share = menu.findItem(R.id.ab_saa_share);
edit.setIcon(R.drawable.ic_compose);
refresh.setIcon(R.drawable.ic_refresh);
find.setIcon(R.drawable.ic_search);
share.setIcon(R.drawable.ic_title_share_default);
}
}
其中,menu_ab_saa.xml文件组成如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/ab_saa_edit"
android:enabled="true"
android:showAsAction="ifRoom|withText"
android:title="@string/ab_edit"
android:visible="true">
</item>
<item
android:id="@+id/ab_saa_refresh"
android:enabled="true"
android:showAsAction="ifRoom|withText"
android:title="@string/ab_refesh"
android:visible="true">
</item>
<item
android:id="@+id/ab_saa_find"
android:enabled="true"
android:showAsAction="collapseActionView"
android:title="@string/ab_find"
android:visible="true">
<menu>
<group android:id="@+id/group1" >
<item
android:id="@+id/item1"
android:icon="@drawable/ic_search"
android:title="@string/ab_sm_saa_findqq"/>
</group>
<group android:id="@+id/group2" >
<item
android:id="@+id/item2"
android:icon="@drawable/ic_search"
android:title="@string/ab_sm_saa_findqq"/>
</group>
</menu>
</item>
<item
android:id="@+id/ab_saa_share"
android:enabled="true"
android:showAsAction="collapseActionView"
android:title="@string/ab_share"
android:visible="true">
<menu>
<item
android:id="@+id/sharebyqq"
android:showAsAction="ifRoom"
android:title="@string/ab_sm_saa_shareqq"/>
<item
android:id="@+id/sharebyweixin"
android:showAsAction="ifRoom"
android:title="@string/ab_sm_saa_sharebywinxin"/>
</menu>
</item>
</menu>
xml中的图片以及文字引用,可自行找资源文件代替。
通过上述操作,即可实现在ActionBar中添加菜单的效果。由于写字功力不够,有些内容不清楚的,可以随时留言,嘿嘿~
PS:最近在弄Android增量更新的内容。目前已经做好例子,在以后的博文中,我会将我的成果分享出来~