Android菜单详解

来源:互联网 发布:一口价域名什么意思 编辑:程序博客网 时间:2024/05/21 22:52

 

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第一次生成时调用。任何想改变options menu的想法只能在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)

public boolean onOptionsItemSelected(MenuItem item)

onMenuItemClick

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

菜单项的增删改查

增:add, addSubMenu

删:removeItem,removeGroup

改:

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

l        上下文菜单:onCreateContextMenu(ContextMenu menu, Viewv,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;

    }

}

7、演示上下文菜单的二级菜单和动态修改


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

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

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

 

一、option Menu
在此介绍最简单的菜单应用代码如下:


运行后,需要点击下方圆圈状菜单按钮,,即可出现菜单,对点击进行响应。如图所示:

 



 

二、sub Menu
将onCreateOptionsMenu内代码改成如下代码,即可实现submenu:

运行后可以出现两级菜单:


在点击file之后,出现:

原创粉丝点击