本文主要介绍两种菜单:选项菜单和上下文菜单。
1.选项菜单是你点击menu键出现在屏幕的下面的选项,很多软件都有选项菜单的使用。如联系人设置,分享等。只不过现在越来越多的手机选择取消menu菜单,所以ActionBar成了替代Menu的控件。还有就是很多软件自己定义了选项菜单。如UC浏览器。
2.上下文菜单主要是长按事件。如记事本的复制 粘贴等。 在长按过程中,我们还可以传递一些数据。
menu选项有两种添加方式,一种是在代码中直接通过menu.add添加。一种是在xml中定义,然后添加通过getMenuInflater添加到代码中。
2.上下文菜单主要是长按事件。如记事本的复制 粘贴等。 在长按过程中,我们还可以传递一些数据。
一:选项菜单。
(1)直接添加.
@Override
public boolean onCreateOptionsMenu(Menu menu) {// 显示一个menu菜单
// TODO Auto-generated method stub
menu.add(0, 0, 0, "关于");
/*
* MenuItem m = menu.add(0, 1, 1, "退出"); m.setIntent(new
* Intent(this,Other.class)); m.setOnMenuItemClickListener(new
* OnMenuItemClickListener(){
*
* @Override public boolean onMenuItemClick(MenuItem item) {
* //注意这个地方有一个返回值。 // TODO Auto-generated method stub
* Toast.makeText(MainActivity.this, "good", Toast.LENGTH_LONG).show();
* return true ; //返回false和返回true不知道有什么区别。 }
*
* }); //可以直接實現跳轉
*/
SubMenu fileMenu = menu.addSubMenu(0, 7, Menu.NONE, "file"); // 建立父菜单的选项
SubMenu editMenu = menu.addSubMenu(0, 8, Menu.NONE, "edit");
fileMenu.setIcon(R.drawable.ic_launcher);
fileMenu.setHeaderIcon(R.drawable.ic_launcher);
fileMenu.setHeaderTitle("请选择你要的颜色:");
fileMenu.add(0, 1, Menu.NONE, "new"); // 建立子菜单选项
fileMenu.add(0, 2, Menu.NONE, "open");
fileMenu.add(0, 3, Menu.NONE, "save");
fileMenu.setGroupCheckable(0, true, true); // 这三个属性是什么意思。
editMenu.add(0, 4, Menu.NONE, "undo").setCheckable(true);// 设置个别选项为可选按钮
editMenu.add(0, 5, Menu.NONE, "redo");
return super.onCreateOptionsMenu(menu);// 此方法用户创建菜单
/*
* menu.add(int groupId,int itemId,int order,int titleRes) groupId
* :所有操作群组的ID itemId ;每一个操作项目的Id order : 操作项目的安排顺序 titleRes :
* 操作项目所显示的标题。 menu.add(0,0,0,"视频") .setIcon(R.drawable.ic_launcher)
* 设置背景图片, .setShortcut('0', 'a'); 设置快捷键方式。点击a的时候相应事件。
*/
}
public boolean onPrepareOptionsMenu(Menu menu) {
// 选项菜单显示之前onPrepareOptionsMenu方法会被调用,你可以用此方法来根据打当时的情况调整菜单。
return false;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {// 点击的时候触发
// TODO Auto-generated method stub
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case 0:
Toast.makeText(MainActivity.this, "点击了选项菜单", Toast.LENGTH_LONG)
.show();
break;
case 1:
this.finish(); // 当为一的时候,退出程序。
}
return true;
}
public void onOptionsMenuClosed(Menu menu) {
// 当菜单关闭的时候执行
}
public boolean onMenuOpened(int featureId, Menu menu) {// 单打开后发生的动作。
return false;
}
(2)通过xml添加:
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
MenuInflater in = getMenuInflater();
in.inflate(R.menu.option_menu, menu);
return true;
}
res/menu/option_item.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/item1"
android:title="视频"/>
<item android:id="@+id/item2"
android:title="上传"/>
</menu>
(3)自定义菜单
Android 菜单(OptionMenu)大全 建立你自己的菜单
(4)动态显示的菜单-根据代码显示不同的菜单选项
Android的Menu状态动态设置方法onPrepareOptionsMenu(Menu menu)
Android实例剖析笔记(二) 这个介绍了android例子中的动态菜单技术,没有怎么看懂。大致意思就是注册 CATEGORY_ALTERNATIVE。判断增加一个动态菜单。2.上下文菜单
(1)定义所有的上下文
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(0,0,0,"1"); //建立上下文菜单
menu.add(0,1,0,"d");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
// TODO Auto-generated method stub
AlertDialog.Builder builder = new AlertDialog.Builder(this); //新建一个窗口
builder.setTitle("Title"); //设置窗口的标题
String message =null ;
switch(item.getItemId()) //判断点击的是那个菜单
{
case 0 :
message="0";
break;
case 1 :
message="1";
break ;
}
builder.setMessage(message) ; //设置显示信息
builder.setPositiveButton("OK", new android.content.DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
setResult(RESULT_OK);
}
}); //添加一个点击事件到窗口
builder.create(); //建立这个窗口
builder.show(); // 显示这个窗口
return true ;
}
}
另外,在onCreateContextMenu中,可以通过ContextMenuInfo menuInfo传递数据。
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo menuInfo) {
// Inflate the menu from xml.
getMenuInflater().inflate(R.menu.context_menu, menu);
// Use the current item to create a custom view for the header.
final AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
final Cursor c =
(Cursor) mAlarmsList.getAdapter().getItem(info.position);
}
(2)可以单独定义一个TextView的上下文选项
TextView eidt = (TextView)findViewById(R.id.textview); //先在Activity中定义一个view
registerForContextMenu(eidt); // 注册这个view的事件,为menu事件,当长时间按住这个view的时候,事件将会被触及。
//然后重写onCreateContextMenu这个方法,定义自己想要的menu菜单。