menu

    技术2024-04-13  7

    Android系统里面有3种类型的菜单:options menucontext menusub menu

    一、             options menu详解

    options menu在屏幕底部最多只能显示6个菜单项。

    Activity里面,一般通以下函数来使用options menu

         Activity::onCreateOptionsMenu (Menu menu)   options menu个函数      只会在menu第一次时调用。

         Activity::onOptionsItemSelected (MenuItem item) 中的菜单项

     

    例:

    第一步:

           @Override

           public boolean onCreateOptionsMenu(Menu menu)

           {

                   menu.add(0, ITEM1, 0, "menu1");

                   menu.add(0, ITEM2, 1, "menu2");

                  return super.onCreateOptionsMenu(menu);

        }

     

    通过onCreateOptionsMenu方法,增加了两个按钮,按钮名字分别为menu1menu2

    主要通过方法Menu.add(int groupId, int itemId, int order, CharSequence title)

    groupId:分组的id,如果不用分组就用0

    itemIdmenu当中每一项的id。这个id是唯一的。

    order:排序的信息,根据这个字段的大小,menu对其中的项进行排序显示。order                 的显示在前边,大的显示在后边。

    titlemenu项的显示信息。

     

    第二步:

           @Override

           public boolean onOptionsItemSelected(MenuItem item)

           {

                  switch (item.getItemId())

                  {

                   case ITEM1:

                   Log.i("onOptionsItemSelected", "menu1");

                   break;

                   case ITEM2:

                   Log.i("onOptionsItemSelected", "menu2");

                   break;

                  }

                  return super.onOptionsItemSelected(item);

        }

    这个方法是实现menu响应单击事件,是一个回调方法。即这个方法只有在事件触发后才会被Android系统自动调用执行。而这个事件就是单击菜单里的某一项(MenuItem),看到这个方法传进来的参数是MenuItem,也就是menu当中的某一项。

    其中通过item.getItemId()可以获得menu的唯一id

     

     

    二、contextmenu详解

        要在相应的view上按几秒后才显示的,用于view,跟某个具体的view绑定在一起。

    Activity里面,一般通以下函数来使用context menu

            registerForContextMenu(View view)

            为某个view注册context menu,一般在Activity::onCreate里面调用。

     

            onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo)

            创建context menu,和options menu不同,context meun每次显示时都会调用这 个函数。

     

            public boolean onContextItemSelected(MenuItem item)

            处理选中的菜单项。

    例:

    第一步:

    onCreate方法中为某个view注册

           @Override

           public void onCreate(Bundle savedInstanceState)

           {

                  super.onCreate(savedInstanceState);

                  setContentView(R.layout.main);

                  txt = (TextView)findViewById(R.id.txt);

                  registerForContextMenu(txt);

           }

     

    第二步:

    生成menu

           @Override

           public void onCreateContextMenu(ContextMenu menu, View v,

                  ContextMenuInfo menuInfo)

           {

                  menu.add(0, ITEM1, 0, "EDIT");

                  menu.add(0, ITEM2, 1, "DELETE");

                  super.onCreateContextMenu(menu, v, menuInfo);

           }

    这个方法同options menu中的onCreateOptionsMenu类似。不予详解。

     

    第三步:

    处理选中的菜单项

           @Override

           public boolean onContextItemSelected(MenuItem item)

           {

                  switch (item.getItemId())

                  {

                  case ITEM1:

                         Log.i("onOptionsItemSelected", "EDIT");

                         break;

                  case ITEM2:

                         Log.i("onOptionsItemSelected", "DELETE");

                         break;

                  }

                  return super.onContextItemSelected(item);

           }

    这个方法同options menu中的onCreateOptionsMenu类似。不予详解。

     

    三、 sub menu详解

    onCreateOptionsMenu内代码改成如下代码,即可实现submenu

           @Override

           public boolean onCreateOptionsMenu(Menu menu)

           {

                  SubMenu sub1 = menu.addSubMenu(0, ITEM1, 0, "sub1");

                  SubMenu sub2 = menu.addSubMenu(0, ITEM2, 1, "sub2");

                  sub1.add(0, ITEM3, 0, "sub1_1");

                  sub1.add(0, ITEM4, 1, "sub1_2");

                  sub2.add(0, ITEM5, 2, "sub2_1");

                  sub2.add(0, ITEM6, 3, "sub2_2");

     

                  return super.onCreateOptionsMenu(menu);

           }

    这里主要通过menu.addSubMenu来增加子菜单,其他的和options menu一样。

    addSubMenuadd的方法类似,这里不做详细讲解。

    最新回复(0)