Menu菜单的属性:
showAsAction 属性共有五个值:ifRoom、never、always、withText、collapseActionView,可以混合使用。
命名空间使用app的否则报错。因为当前是V7包的AppCompatActivity
app:showAsAction=”always”
语法(SYNTAX):
"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android">
"@[+][package:]id/resource_name"
android:title="string"
android:titleCondensed="string"
android:icon="@[package:]drawable/drawable_resource_name"
android:onClick="method name"
android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
android:actionLayout="@[package:]layout/layout_resource_name"
android:actionViewClass="class name"
android:actionProviderClass="class name"
android:alphabeticShortcut="string"
android:numericShortcut="string"
android:checkable=["true" | "false"]
android:visible=["true" | "false"]
android:enabled=["true" | "false"]
android:menuCategory=["container" | "system" | "secondary" | "alternative"]
android:orderInCategory="integer"/>
"@[+][package:]id/resource name"
android:checkableBehavior=["none" | "all" | "single"]
android:visible=["true" | "false"]
android:enabled=["true" | "false"]
android:menuCategory=["container" | "system" | "secondary" | "alternative"]
android:orderInCategory="integer">
-
//在Activity 中重写该方法 用于创建 OptionMenu。
注意: 官方文档明确说明,该方法必须返回 true 才会创建菜单。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//菜单加载器加载菜单资源
getMenuInflater().inflate(R.menu.main,menu);
//java代码动态添加菜单项
menu.add(Menu.NONE,123,0,"系统设置");
return true;
}
//选项菜单 Item 的选择时间回调方法
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_add:
Toast.makeText(this, "action_add", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
该方法是 Activity 的方法。 通用的菜单点击事件回调函数。内部会根据菜单的类型,去调用 onOptionsItemSelected()方法。以及 onContextItemSelected()方法等。
在Activity 中重写该方法来创建 ContextMenu;具体与 OptionsMenu 类似
onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo)
注意: 上下文菜单可以设置以下属性。
menu.setHeaderIcon(R.drawable.ic_launcher);//设置上下文的图标
menu.setHeaderTitle(“提示!”);//设置上下文的头部标题
menu.setHeaderView(view)//设置上下文的头部 View
在 Activity 中重写该方法 来获取上下文的点击事件回调
onContextItemSelected//获取上下文点击事件
提示: 如果是 ListView 等列表控件注册了上下文菜单,则得到长按的 Item 的位置可以通过以下代码来获取:
AdapterView.AdapterContextMenuInfo menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
int position = menuInfo.position;
通过以下方法来为某一个控件 注册上下文菜单。
registerForContextMenu(view);//注册激活上下文菜单的组件
(注意:弹出上下文菜单是长按该组件)
PopupMenu popupMenu = new PopupMenu(this, view);//创建 Popup 菜单
//加载 资源菜单 到 PopupMenu
getMenuInflater().inflate(R.menu.my_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
Toast.makeText(MainActivity.this, item.getItemId(), Toast.LENGTH_LONG).show();
return true;
}
});
popupMenu.show();
popupMenu.setOnDismissListener//菜单关闭监听