1、选项菜单 OptionsMenu
方法一、在程序生成菜单,需要调用4种可用的方法
1、public boolean onCreateOptionsMenu(Menu menu) {
menu.add(Menu.NONE, Menu.FIRST + 1, 1, "删除").setIcon(
android.R.drawable.ic_menu_delete);
return true;
}
menu.add(Menu.NONE, Menu.FIRST + 1, 1, "删除").setIcon(
android.R.drawable.ic_menu_delete);
return true;
}
2、@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){ //判断操作的itemId
case Menu.FIRST+1:
Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
break;
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){ //判断操作的itemId
case Menu.FIRST+1:
Toast.makeText(this, "删除", Toast.LENGTH_SHORT).show();
break;
}
return false;}
3、public void onOptionsMenuClosed(Menu menu) {
Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();
}
Toast.makeText(this, "选项菜单关闭了", Toast.LENGTH_LONG).show();
}
4、public boolean onPrepareOptionsMenu(Menu menu) {
Toast.makeText(this,
"在菜单显示(onCreateOptionMenu()方法之前合调用此操作,可以在此操作之中完成一些预处理功能。)",
Toast.LENGTH_LONG).show();
return true;
}
Toast.makeText(this,
"在菜单显示(onCreateOptionMenu()方法之前合调用此操作,可以在此操作之中完成一些预处理功能。)",
Toast.LENGTH_LONG).show();
return true;
}
方法二、通过配置文件生成 、通过MenuInflater类转换
在menu文件夹下创建一个mymenu.xml配置文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item01"
android:title="添加"
android:icon="@android:drawable/ic_menu_add"/>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item01"
android:title="添加"
android:icon="@android:drawable/ic_menu_add"/>
</menu>
在程序中通过创建菜单时将配置文件转换成菜单
public boolean onCreateOptionsMenu(Menu menu) {
super.getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
super.getMenuInflater().inflate(R.menu.mymenu, menu);
return true;
}
2、上下文菜单(ContextMenu)
方法与上面类似,都有两种方法实现。
1、onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo)
ContextMenuInfo menuInfo)
2、onContextItemSelected(MenuItem item)
3、onContextMenuClosed(Menu menu)
此上下文菜单可以用在listView上,不过需要注册才能将上下文菜单应用在listView列表上
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.listView = new ListView(this);
this.listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1, this.data));
super.setContentView(this.listView);
super.registerForContextMenu(listView);
}
super.onCreate(savedInstanceState);
this.listView = new ListView(this);
this.listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1, this.data));
super.setContentView(this.listView);
super.registerForContextMenu(listView);
}
3、子菜单(SubMenu)
子菜单用的方法与选项菜单一样
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu fileMenu=menu.addSubMenu("文件");
SubMenu editMenu=menu.addSubMenu("编辑");
fileMenu.add(Menu.NONE, Menu.FIRST +1, 1, "新建");
fileMenu.add(Menu.NONE, Menu.FIRST +2, 2, "打开");
fileMenu.add(Menu.NONE, Menu.FIRST +3, 3, "保存");
editMenu.add(Menu.NONE, Menu.FIRST +4, 4, "撤销");
editMenu.add(Menu.NONE, Menu.FIRST +5, 5, "恢复");
return super.onCreateOptionsMenu(menu);
}
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu fileMenu=menu.addSubMenu("文件");
SubMenu editMenu=menu.addSubMenu("编辑");
fileMenu.add(Menu.NONE, Menu.FIRST +1, 1, "新建");
fileMenu.add(Menu.NONE, Menu.FIRST +2, 2, "打开");
fileMenu.add(Menu.NONE, Menu.FIRST +3, 3, "保存");
editMenu.add(Menu.NONE, Menu.FIRST +4, 4, "撤销");
editMenu.add(Menu.NONE, Menu.FIRST +5, 5, "恢复");
return super.onCreateOptionsMenu(menu);
}
第二种方法需要创建两个菜单xml文件
filemenu和editmenu
然后在程序中super.getMenuInflater().inflate(R.menu.filemenu, filemenu);
super.getMenuInflater().inflate(R.menu.editmenu, editmenu);
将菜单文件转到布局中 即可
可惜不能在布局文件单定义父子菜单的关系、、、