android中的菜单有两种:一种是通过MENU键激活,叫Options Menu;另一种是当用户长按一个元素时激活,叫Context Menu。
当用户长按一个控件时,可以弹出相应的菜单。
(1)Options Menu
Options Menu 用于当前的Activity,它包括两种菜单项;
icon menu:options menu在屏幕底部最多只能显示6个菜单项,这些菜单项为icon menu ,icon menu只支持文字(title)以及icon,可以设置快捷键,不支持checkbox以及radio控件,所以本能设置checkable选项。
(2)Context Menu
Context Menu用于view,跟某个具体的view绑定在一起,该类型的菜单不支持icon和快捷键。
(3)以下代码实现了相应的功能:
Android中的菜单有两种,一种是通过MENU键激活,叫Options Menu;另一种是当用户长按一个元素时激活,叫Context Menu。
Options Menu
在Activity里面,一般通过以下方法来使用Options Menu:
(1)onCreateOPtionsMenu(Menu menu) 创建Options Menu,这个方法只会在menu第一次显示时调用。
(2)onPrepareOptionsMenu(Menu menu) 更新改变Options Menu的内容,这个方法会在menu每次显示时调用。
(3)onOptionsItemSelected(MenuItem item)处理选中的菜单。
Options Menu示例:
代码:
package com.MenuTest;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.EditText;
public class MenuTestActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
t1=(EditText) findViewById(R.id.t1);
}
EditText t1;
@Override
public boolean onCreateOptionsMenu(Menu menu)//创建Option Menu菜单,只会在Menu第一次显示时调用
{
super.onCreateOptionsMenu(menu);
menu.add(1,1,1,"菜单1");
menu.add(1,2,2,"菜单2");
menu.add(1,3,3,"菜单3");
SubMenu submenu=menu.addSubMenu(1,4,4,"菜单4");//添加子菜单
submenu.add("子菜单1");
submenu.add("子菜单2");
submenu.add("子菜单3");
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) //处理选中的菜单项;单击某个菜单项时,将菜单Text值赋给EditText
{
super.onOptionsItemSelected(item);
switch(item.getItemId())//获得菜单的ID编号
{
case 1: t1.setText("菜单1");break;
case 2: t1.setText("菜单2");break;
case 3: t1.setText("菜单3");break;
case 4: t1.setText("菜单4");break;
}
return true;
}
}
2. Context Menu
在Activity里面,一般通过以下方法来使用Context Menu:
(1) registerForContextMenu(View view)为某个View 注册Context Menu,一般在Activity的onCreate里面调用。
(2) onCreateContextMenu(ContextMenu menu,View v,ContextMenu context MenuInfo menuinfo)创建context menu,和 Options Menu不同,context menu每次是显示时都会调用这个方法。
(3) onContextItemSelected(MenuItem item)处理选中的菜单项。
Context Menu示例:
代码:
package com.MyContext;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View;
import android.widget.Button;
public class MyContextActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Button button1=(Button) findViewById(R.id.button1);
this.registerForContextMenu(button1);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderTitle("Context Menu");
menu.add("菜单1");
menu.add("菜单2");
menu.add("菜单3");
}
}
(4)总结
在整个菜单设计制作中,一般是通过以下方法使用Options Menu:
onCreateOptionsMenu(Menu menu)创建Options Menu,这个方法只会在menu第一次显示时调用;
onCreateOptionsMenu (Menu menu)更新改变Options Menu的内容,这个方法会在menu每次显示是调用;
onCreateOptionsMenu(MenuItem menu)处理选中的菜单项。
同时Context Menu在Activity里面,一般是通过以下方法使用Context Menu:
registerForContextMenu(View view)为某个view注册Context Menu,一般在Activity的onCreate里面调用;
onCreateContextMenu(ContextMenu menu,View v,ContextMenu.Context MenuInfo menuInfo)创建context menu和Options Menu不同,context meun每次显示时都会调用这个方法。
onContextItemSelected(MenuItem item)处理选中的菜单项 。
以上两种Menu都可以加入子菜单,但子菜单不能嵌套子菜单,这意味着在Android系统中菜单只有两层,同时子菜单不支持icon。