由于ActionBarActivity已经过时,用来替代的是AppCompatActivity。但是对于menu的使用还是一样的,下面介绍下对于menu的简单创建,和几个功能的使用。
先上效果图
1.创建任意Activity继承AppCompatActivity
public class MainActivity extends AppCompatActivity
2.然后重写onCreateOptionsMenu方法,返回true表示你要自定义菜单的item
先贴出代码如下
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate('R.menu.main', menu);
MenuItem locationItem = menu.add(0, 'R.id.menu_location', 0, 'R.string.menu_location');
locationItem.setIcon('R.drawable.ic_action_location');
MenuItemCompat.setShowAsAction(locationItem, 'MenuItem.SHOW_AS_ACTION_IF_ROOM');
return true;
}
3.这里的R.menu.main
是定义在res menu下的文件
main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:support="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_refresh"
android:icon="@drawable/ic_action_refresh"
android:title="@string/menu_refresh"
support:showAsAction="ifRoom"/>
<item
android:id="@+id/menu_settings"
android:icon="@drawable/ic_action_settings"
android:title="@string/menu_settings"
</menu>
每个item就是menu上的一个图标,
其中icon是你要显示的图标,
title是你要显示的文字
showAsAction有几种模式
1、always:这个值会使item一直显示在Action Bar上。
2、ifRoom:如果有足够的空间,这个值会使item显示在Action Bar上。
3、never:这个值使item永远都不出现在Action Bar上。
4、withText:这个值使item和它的图标,菜单文本一起显示。
4.在代码里设置location
MenuItem locationItem = menu.add(0, 'R.id.menu_location', 0, 'R.string.menu_location');
menu.add
方法的参数这里介绍下
public MenuItem add(int groupId, int itemId, int order, CharSequence title);
1.groupId 用于对menu里的item进行分组 如果不分组可用`Menu.NONE`
2.itemId 设置item的id,不过不区分id可用 `Menu.NONE`
3.order item在menu里的顺序,如果不关心顺序可用`Menu.NONE`
4.title item的名字
5.在res下的values定义了一个ids.xml文件,对应着R.id.menu_location
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="menu_location" type="id"/>
</resources>
6.然后给location设置icon
locationItem.setIcon(R.drawable.ic_action_location);
7.最后绑定给menu
MenuItemCompat.setShowAsAction(locationItem, MenuItem.SHOW_AS_ACTION_IF_ROOM);
setShowAsAction
第二个参数对应着menu中的showAsAction
的几种模式
8.最后在重写的onOptionsItemSelected
方法中处理对应item的点击事件
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_refresh:
// 处理刷新
return true;
case R.id.menu_location:
// 处理位置信息
return true;
case R.id.menu_settings:
// 设置
return true;
}
return super.onOptionsItemSelected(item);
}
如有哪些地方有问题,欢迎指点。