Android菜单详解

菜单是Android系统中重要的用户接口之一。

Android提供了三种菜单类型,分别为options menu(选项菜单),context menu(上下文菜单),sub menu(子菜单)。

options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能嵌套子菜单。

options menu最多只能在屏幕最下面显示6个菜单选项,成为icon menu,icon menu不能有checkable选项。多余6个的会以moreicon menu来调出,成为expanded menu。optionsmenu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。

选项菜单:

用Activity类的onCreateOptionsMenu方法来创建选项菜单。

方法定义:public Boolean onCreateOptionsMenu(Menu menu)

public classMenu1Activity extends Activity implementsOnMenuItemClickListener{//菜单项单击事件类实现OnMenuItemClickListener接口

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

//创建菜单

publicboolean onCreateOptionsMenu(Menu menu) {

MenuInflaterinflater=this.getMenuInflater();

inflater.inflate(R.menu.menu1,menu);

//监听所有菜单项

for(int i=0;i<menu.size();i++){

menu.getItem(i).setOnMenuItemClickListener(this);

}

returntrue;

}

//显示菜单项和弹出的内容

@Override

publicboolean onOptionsItemSelected(MenuItem item) {

//利用switch语句显示菜单项

switch(item.getItemId()){

caseR.id.ss:

Toast.makeText(this,"搜索框",Toast.LENGTH_LONG).show();

break;

caseR.id.xj:

Toast.makeText(this,"查看",Toast.LENGTH_LONG).show();

break;

caseR.id.xx:

Toast.makeText(this,"选项",Toast.LENGTH_LONG).show();

break;

caseR.id.zh:

Toast.makeText(this,"账户",Toast.LENGTH_LONG).show();

break;

caseR.id.io:

Toast.makeText(this,"导入与导出",Toast.LENGTH_LONG).show();

break;

}

returntrue;

}

上下文菜单:

上下文菜单可以和任意View对象进行关联,如TextView,EditText,Button等。上下文菜单与子菜单效果有些类似。

创建上下文菜单首先要覆盖Activity类的onCreateContextMenu方法。

方法定义:public void onCreateContextMenu(CreateContextMenu,View view,ContextMenuInfo menuInfo)

上下文菜单使用ContextMenu接口的setHeader.Title和setHeaderIcon方法设置上下文菜单头的标题和图像。

上下文菜单可以带选项按钮和复选框,不支持嵌套子菜单。

上下文菜单必须注册到指定的View上才可以显示,可以使用Activity类的registerForContextMenu方法。

上下文菜单的单击事件可以使用onMenuItemSeleted方法来响应。

public class MenuTestActivity4 extends Activity {

public voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

TextViewtv = (TextView) this.findViewById(R.id.textView);

this.registerForContextMenu(tv);

}

@Override

publicboolean onContextItemSelected(MenuItem item) {

switch(item.getItemId()) {

caseR.id.subitem1:

Toast.makeText(this,"subitem1", Toast.LENGTH_LONG).show();

break;

caseR.id.subitem2:

break;

}

returnsuper.onContextItemSelected(item);

}

int i=1;

// 每次上下文菜单显示都会调用

public voidonCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfomenuInfo) {

MenuInflaterinflater = this.getMenuInflater();

inflater.inflate(R.menu.sub_menu,menu);

i++;

menu.getItem(0).setTitle("x"+i);

super.onCreateContextMenu(menu,v, menuInfo);

}

}

子菜单:

Menu接口的addSubMenu方法用来添加子菜单,addSubMenu方法和add方法的参数个数和类型完全相同,所部同的是它们的返回值类型。子菜单可以带复选框和选择按钮。

1、Xml创建2、动态创建

Menu submenu =Menu.addSubMenu(x, x, x, x)

submenu.add()

submenu.add()

main_menu.addSubMenu(x,x,x,x);

或:

getMenuInflater().inflater(R.menu.submenu, submenu);

要想实现subMenu只需将上面的OnCreateOptionMenu这个方法的内的代码修改即可:

public classMenuTestActivity3 extends Activity {

private static final int SUBMENU = 10;

private static final int SUBITEM1 =SUBMENU+1;

private static final int SUBITEM2 =SUBMENU+2;

private static final int SUBITEM3 =SUBMENU+3;

public void onCreate(BundlesavedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

//只在选项菜单第一次显示时调用

public booleanonCreateOptionsMenu(Menu menu){

MenuInflaterinflater = this.getMenuInflater();

inflater.inflate(R.menu.sub_menu,menu);

SubMenusubMenu = menu.addSubMenu(1,SUBMENU, 1, "子菜单");

subMenu.add(20,SUBITEM1,1,"wwww");

subMenu.add(20,SUBITEM2,2,"subitem2");

subMenu.add(30,SUBITEM3,3,"subitem3");

subMenu.setGroupCheckable(20,true,true);

MenuItemitem = subMenu.getItem(0);

item.setChecked(true);

subMenu.findItem(SUBITEM3).setCheckable(true);

returntrue;

}

public boolean onOptionsItemSelected(MenuItemitem) {

switch(item.getItemId()){

case R.id.menuitem1:

Toast.makeText(this, "newfile", Toast.LENGTH_LONG).show();

break;

caseR.id.menuitem2:

Toast.makeText(this,"exit", Toast.LENGTH_LONG).show();

break;

case SUBITEM1:

break;

case SUBITEM2:

this.finish();

break;

}

return true;

}

}

更多相关文章

  1. 安卓学习第三天
  2. Android(安卓)Volley完全解析
  3. Android(安卓)录音实现方法、仿微信语音、麦克风录音、发送语音
  4. 配置dialog无标题的几种方法
  5. setImageResource和setImageDrawable区别
  6. android Onmeasure
  7. android 中findViewById()为null的可能原因
  8. Android(安卓)sdk 安装后 找不到adb.exe问题解决方法
  9. android 退出 activity

随机推荐

  1. android Intent常见应用
  2. android 条码识别软件开发全解析
  3. Android(安卓)PopupWindow 的显示位置
  4. android shape 用法整理
  5. Android View 绘制流程之三:draw绘制
  6. android相对布局 相对对齐
  7. 我的Android第一步
  8. Android学习―LinearLayout布局中实现左
  9. Android framework Watchdog的监控过程
  10. Android 四大组件的理解