首页 > 代码库 > android菜单简易笔记

android菜单简易笔记

API Guides ----UI------Menus

Menu是一个通用UI组件,提供类似用户使用助手 

3.0(API 11)安卓不再提供一个专用的菜单按钮,安卓APP应用当中最多可以出现6个菜单,如果要提供更多选项,在下发会出现一个more,点击后出现其他选项。使用菜单键有3种方式

options menu 收集菜单选项提供给APP ,可以放置一些全局按钮,比如,搜索,设置, Compose; 在android 2.3 以下是存在真实按钮的;使用3.0或者更高版本会提供 actionbar构成整个屏幕, 是可悬浮选项,3.0 Menu button就已经过期了

android建议使用XML定义菜单,可以在activity 或 fragment 使用菜单填充 Menu     

优点:形象化菜单结果,可以让内容和行为代码分离,可以提供可选择的菜单适应不同版本和尺寸

如果版本是android 2.3或者更低,系统会调用 onCreateOptionsMenu() 去创建一个option menu, 如果安卓版本是3.0 那么系统会调用 onCreateOption menu 创建并有序地显示 action bar

事件:

当用户去选择一个Item 选项的时候,系统会调用 onOptionsItemSelected () , 并通过getItemid(),得到一个所选的 Item的选项的标识符(id)

再根据id 操作

onOptionItemSelected( MenuItem item ){

switch(item.getItemId()){

case R.id.open: 

方法();

break;}}

注意:这个菜单仅仅和当前的Activity 有关系,在其他是不会显示的

在android3.0 当中增加了一个能力:在XML中添加 android: onClick 属性,这个属性的值必须定义一个方法名称,方法的名称可以使用在菜单当中,此方法必须public , 且仅有一个参数 MenuItem , 当系统方法被调用的时候,这个方法就会被触发;

<item

android : id ="@+id /save"

android : title = "never"

android:showAsAction="never"

android: onClick="save"

/>

public void save Message(MenuItem itme ){ }


规则:

必须定义一个menu节点,

<menu>里面可以包含menu items 选项,这个<menu>必须作为根节点,在里面可以控制一个或多个<Item> 和 <group>

<item>里面提供一个单独的item在这个menu中,这个元素可能会包含一个嵌套的menu的节点元素,是为了创建一个菜单

            item元素支持多个属性,可以定义在菜单的选项的行为中

                android: id 是菜单的唯一标识符,允许应用识别菜单所选项 

                android: icon 为菜单添加图片(2.3可以加图片,高版本不添加图片)

                android: titile 为菜单提供标题

                android: showAsAction :   在什么时候显示在action bar上面(平板上,高版本当中)

showAsAction : 是一个类似键盘键,显示在导航菜单栏上(Action Bar),这个导航菜单栏会显示在一个activity 当中,包含一个ActionBar,API版本最低3.0 android 11(设置never菜单就不会跳到右上角)

相关属性:

ifRoom  如果上面有空间,我们就放置这个Item选项,

withText    可以包含一些文字,或者标题,多放其他属性用”|“

never    不要放置( 右上角 )

always    不管有没有位置都放置


<group>一个可选项,不可见 地包含一个<Item>元素,可以允许我们去把菜单进行分类

子菜单:

在任意Item当中我们都可以添加子菜单(除了子菜单),menu作为item的子元素

子菜单事件:

一,

一般处理一级菜单

onOptionsItemSelected( MenuItem item ){

    SubMenu subMenu = item . getSubMenu();

    MenuItem menuItem  = subMenu . findItem(子菜单ID);

    menuItem.setIntent(intent);}

SubMenu subMenu = item

一般处理二级菜单

二,

onMenuItemSelected ( int featureId , MenuItem item ){

    switch(item.getItemId()){

    case R.id.节点:

    break;

}}

①Contextual Menus上下文菜单:(长按)

提供一个动作去影响一个特殊的选项,在任何一个view中都可以添加一个显示上下文帧布局菜单,但是经常使用于ListView 或GridView当中,加载模式有两种:浮动列表,长按事件才会出来;

创建一个上下文菜单

1,view上面注册上下文menu,使用registerForContextMenu() ,menu就会关联到View;    如果activity中使用ListView或GridView,当我们想要每一个Item都提供一个上下文菜单的时候,需要在ListView或GridView中去注册 registerForContextMenu();

2. 在Activity或者Fragment 当中实现onCreateContextMenu() 方法,注册后会接收一个长按事件,系统会调用onCreateContextMenu()

   例如:

        ①listView中注册    registerForContextMenu(listView);

        ① 在menu 设置几个菜单选项

        ②实现方法

    onCreateContextMenu(ContextMenu mennu,View v,ContextMenuInfo, info){

    getMenuInflater().inflate(Menu的ID ,menu)}

       

onContextItemSelected(ItemMenu item){

    AdapterContextMenuInfo info =  (AdapterContextMenuInfo)item.getMenuInfo();//返回一个接口

    switch(item.getItemId()){

    case R.id.edit: 

       String value = http://www.mamicode.com/adapter.getItem( info . position );

    break;}}

3.MenuInflater 允许从一个资源文件中让我们填充一个上下的文菜单,回调方法的参数包含View,当用户长按后得到一个ContextMenu.ContextMenuInfo对象,此对象提供一个关于被选中的Item的额为的信息。

②Action mode 上下文菜单 android 3.0 API(11)

让系统 implement ActionMode , 让用户获得焦点,并和它进行交互的选项,让用户选择选项时,上下文菜单会显示在屏幕的顶端。当模式被使用时,用户可以选择多个选项,或者反向选择等,当用户按返回键时让模式消失,这个上下文菜单可以单独使用,也可以结合actionbar 使用。如果当前版本是3.0或更高版本,提倡使用

用户可以长按或者复选框,可绑定ListView和GreadView;

            ①implement ActionMode.Callback接口,在接口中可处理上下文菜单actionbar,并响应单击事件,

            在onCreateAcionMode 加载上下文菜单 

               MenuInflater inflater = mode.getMenuInflater();

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

           onPrepareActionMode

           在onActionItemClicked 中处理事件    switch(item.getItemId()){case R.id.case:  mode.finish(); break }

           在onDestroyActionMode中销毁 mActionMode = null;  

           在listView添加onItemLongClickListener 在内部  if (mActionModo!=null){

                    return false;

            };  mActionMode =startActionMode( callback );

                view.setSelected(true);

                rerurn true;

          

            

③Popup Menu(弹出菜单):

弹出菜单可以固定在某个目的Viwe下面,如果view下面有空间的情况下。

        API 11 或者更高

        ①在xml定一个菜单

        ②实例化菜单需要上下文对象和一个View去固定菜单在哪里

        ③使用MenuInflater填充菜单,如果API是14 可以使用PopuMenu.inflate() ;

例如:

       <Button  ...

         android : onClick="showPopup"    

        />

        public void showPoput(View v){

        PubuMenu PopupMenu = new PopuMenu(this, view);

        pupuMenu.getMenuInflater().inflate( Menu.menu.main,popuMenu.getMenu());

        popupMenu.show();

        }

    

        <mennu

                <item :id @+id /"open" />

        >


 


android菜单简易笔记