1.配合antionbar或者toolbar使用
1.menu常用的几个重写方法
#onCreateOptionsMenu(Menu menu)
每次Activity一创建就会执行,一般只执行一次;
#onPrepareOptionsMenu(Menu menu)
每次menu被打开时,该方法就会执行一次
#onOptionsItemSelected(MenuItem item)
每次menu菜单项被点击时,该方法就会执行一次;
#invalidateOptionsMenu()
刷新menu里的选项里内容,它会调用onCreateOptionsMenu(Menu menu)方法
#onCreateContextMenu()
创建控件绑定的上下文菜单menu,根据方法里的View参数识别是哪个控件绑定
#onContextItemSelected(MenuItem item)
点击控件绑定的上下菜单menu的内容项
-------------------------------------------------------------------------分割线--------------------------------------------------
2.创建Menu文件夹,在文件中创建Menu文件,常用属性如下:
title: 菜单标题
icon: 图标资源id
id: 控件id名
showAsAction:属性有五个之:ifroom、never、always、withText、collapseActionView
ifroom:会显示在Item中,但是如果已经有4个一晌的Item时会隐藏在溢出列表中。当然个数并不仅仅局限于四个,包括屏幕的宽窄而定。
never:永远不会显示。只在溢出列表中显示,而且只显示标题,所以在定义Item时,最好把标题都带上
always:无论是否已出,总会显示
withText:示意ActionBar要显示文本的标题。ActionBar会尽可能的显示这个标题,但是,如果图标有效并且受到ActionBar空间的限制,文本标题就有可能显示不全
collapseActionView:声明了这个操作视窗应该被折叠到一个按钮中,当用户选择这个按钮时,这个操作视窗展开。否则,这个操作视窗在默认的情况下是可见的,并且即便在用于不适用的时候,也要战还有操作栏的有效空间,一般要配合ifRoom一起使用才有效
visible:菜单项默认状态是否可视
enable:菜单项默认状态是否被激活
orderInCategory:Actionbar中item中的优先级属性。
3.在JAVA中重写onCreateOptionsMenu即可加载到menu布局
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- // Inflate the menu; this adds items to the action bar if it is present.
- getMenuInflater().inflate(R.menu.activity_main, menu);
- return true;
- }
一般情况下,直接添加icon属性是无法显示你所添加的图片的
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (menu != null) {
if (menu.getClass().getSimpleName().equalsIgnoreCase("MenuBuilder")) {
try {
@SuppressLint("PrivateApi") Method method = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
method.setAccessible(true);
method.invoke(menu, true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return super.onMenuOpened(featureId, menu);
}
添加以上的代码,即可
2.自定义按钮,在按钮中加载menu
PopupMenu popup = new PopupMenu(this,iv_menu_show );//第二个参数是绑定的那个view //获取菜单填充器 MenuInflater inflater = popup.getMenuInflater(); //填充菜单 inflater.inflate(R.menu.main_menu, popup.getMenu()); //绑定菜单项的点击事件 popup.setOnMenuItemClickListener(this); //显示(这一行代码不要忘记了) popup.show();这里和一般的使用Menu有点小区别,主要是用到PopupMenu类进行填充