Android---菜单详解

 

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值