现在的位置: 首页 > 综合 > 正文

Android菜单详解

2014年01月17日 ⁄ 综合 ⁄ 共 4478字 ⁄ 字号 评论关闭

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的会以more icon menu来调出,成为expanded menu。options menu通过activity的onCreateOptionsMenu来生成,这个函数只会在menu第一次生成时调用。任何想改变optionsmenu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。onOptionsItemSelected
处理选中的菜单项。

context menu是跟某个具体的view绑定在一起,在activity种用registerForContextMenu来为某个view注册context menu。context menu在显示前都会调用onCreateContextMenu来生成menu。onContextItemSelected选中的菜单项。

android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。

1、利用xml定义选项菜单

a)        options menu通过activity的onCreateOptionsMenu来生成

b)       这个函数只会在menu第一次生成时调用。

                       i.             任何想改变options menu的想法只能在onPrepareOptionsMenu来实现,这个函数会在menu显示前调用。

c)        onOptionsItemSelected 用来处理选中的菜单项。

2、           响应菜单项单击事件

3种方式

onMenuItemSelected(intfeatureId,

MenuItem
item)

onOptionsItemSelected(MenuItemitem)                                        

onMenuItemClick

3、           动态添加、修改和删除菜单项

菜单项的增删改查

增:add, addSubMenu

删:removeItem,removeGroup

改:

l        选项菜单:onPrepareOptionsMenu()——>
MenuItem->setXXX()

l        上下文菜单:onCreateContextMenu(ContextMenumenu, View v,ContextMenuInfo menuInfo) {} 方法在每次调用上下文菜单时都会被调用一次

 

boolean cn.class3g.activity.MenuTestActivity.onPrepareOptionsMenu(Menu menu)

public boolean onPrepareOptionsMenu(Menu menu)

Prepare the Screen's standard options menu to be displayed. This is called right before the menu is shown, every time it is shown. You can use this method to efficiently enable/disable items or otherwise dynamically
modify the contents.

The default implementation updates the system menu items based on the activity's state. Deriving classes should always call through to the base class implementation.

Parameters

 

menu

The options menu as last shown or first initialized by onCreateOptionsMenu().

Returns

·                       You must return true for the menu to be displayed; if you return false it will not be shown.

See Also

onCreateOptionsMenu(Menu)

 

private int i = 0;

public boolean onPrepareOptionsMenu(Menu menu) {

    i++;

    MenuItem mi = menu.getItem(0);

    mi.setTitle(mi.getTitle() +""+ i);

   

    return super.onPrepareOptionsMenu(menu);

}

4、           子菜单的创建

l        Xml创建

l        动态创建

 

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);

5、           带单选或复选的子菜单

    public boolean onCreateOptionsMenu(Menu menu) {

       getMenuInflater().inflate(R.menu.second_menu, menu);

      

       SubMenu sb = menu.findItem(R.id.item3).getSubMenu();

       sb.setIcon(R.drawable.ic_launcher);

      

//     sb.setGroupCheckable(0, true, true);

       sb.getItem(0).setCheckable(true);

      

       sb.getItem(0).setChecked(true);

      

       this.menu = menu;

       return super.onCreateOptionsMenu(menu);

    }

6、           上下文子菜单

public class ContextMenuActivity
extends Activity {

   

    ContextMenu menu = null;

   

    protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       setContentView(R.layout.main);

      

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

       this.registerForContextMenu(tv);

    }

   

public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo){

       menu.setHeaderTitle("上下文菜单");

       menu.setHeaderIcon(R.drawable.ic_launcher);

      

       getMenuInflater().inflate(R.menu.context_menu, menu);  

       this.menu = menu;

    }

    public boolean onContextItemSelected(MenuItem item) {

 

       switch (item.getItemId()) {

       case R.id.subitem1:

         Toast.makeText(this, "subitem1",

Toast.LENGTH_SHORT).show();

           break;

       case R.id.subitem2:

           Toast.makeText(this, "subitem2",

Toast.LENGTH_SHORT).show();

           break;

       case R.id.subitem3:

           Toast.makeText(this, "subitem3",

Toast.LENGTH_SHORT).show();

           break;

       }

       return true;

    }

}

 

android提供了三种菜单类型,分别为options menu,context menu,sub menu。options menu就是通过按home键来显示,context menu需要在view上按上2s后显示。这两种menu都有可以加入子菜单,子菜单不能种不能嵌套子菜单。

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

context menu是跟某个具体的view绑定在一起,在activity种用registerForContextMenu来为某个view注册context menu。context menu在显示前都会调用onCreateContextMenu来生成menu。onContextItemSelected选中的菜单项。

android还提供了对菜单项进行分组的功能,可以把相似功能的菜单项分成同一个组,这样就可以通过调用setGroupCheckable,setGroupEnabled,setGroupVisible来设置菜单属性,而无须单独设置。

 

抱歉!评论已关闭.