Android学习之Menu

1.普通的Menu

在Activity中覆盖onCreateOptionsMenu(Menu menu)方法,该方法负责生产menu,它是一个回调函数,即当按下手机设备上的menubutton时Android系统才会生产菜单。

public boolean onCreateOptionsMenu(Menu menu) {

//menu.add(arg0, arg1, arg2, arg3)给button加入一项菜单

//第一个參数:分组的id,假设不用分组则设为0

//第二个參数:menu中每一项的id,这个id应该是唯一的

//第三个參数:排序的信息,依据这个字段的大小,menu对当中的项进行排序显示:小的排在前面

//第四个參数:menu项的显示信息

menu.add(0, MENU_ITEM_1, 0, "APPLE");

menu.add(0, MENU_ITEM_2, 0, "ORANGE");

return super.onCreateOptionsMenu(menu);

}

假设要加入单击事件,则要覆盖onOptionsItemSelected(MenuItem item)方法。

public boolean onOptionsItemSelected(MenuItem item) {

//通过id推断传来的item,这个id通过item.getItemId()得到

switch(item.getItemId()){

case MENU_ITEM_1:

t = Toast.makeText(this, "you choose the apple", Toast.LENGTH_SHORT);

t.show();

break;

case MENU_ITEM_2:

t = Toast.makeText(this, "you choose the orange", Toast.LENGTH_SHORT);

t.show();

break;

}

return true;

}

2.子菜单(SubMenu)

public boolean onCreateOptionsMenu(Menu menu) {

menu.add(0, MENU_ITEM_1, 1, "APPLE");

menu.add(0, MENU_ITEM_2, 2, "ORANGE");

//为menu创建SubMenu对象

SubMenu subMenu = menu.addSubMenu(0, MENU_ITEM_3, 3, "BANANA");

//向subMenu中加入选项

subMenu.add(0, 31, 31, "BIG BANANA");

subMenu.add(0, 32, 32, "SMALL BANANA");

return super.onCreateOptionsMenu(menu);

}

3.上下文菜单(ContextMenu)——长按特定View后弹出的菜单

不论什么视图都能够注冊ContextMenu,但最常见的是用于列表视图ListView的item。

在onCreate方法中为View注冊ContextMenu。

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.contextmenu);

btn1 = (Button)findViewById(R.id.btn1);

btn2 = (Button)findViewById(R.id.btn2);

//为Button注冊ContextMenu

registerForContextMenu(btn1);

registerForContextMenu(btn2);

}

覆盖Activity的onCreateContenxtMenu()方法,调用Menu的add方法加入菜单项(MenuItem)

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

if(v==btn1){

//设置菜单标题

menu.setHeaderTitle("this is the frist");

//加入菜单

menu.add(0, 200, 0, "context menu 1");

menu.add(0, 201, 0, "context menu 2");

}

if(v==btn2){

//设置菜单标题

menu.setHeaderTitle("this is the second");

//加入菜单

menu.add(0, 300, 0, "context menu 3");

menu.add(0, 301, 0, "context menu 4");

}

super.onCreateContextMenu(menu, v, menuInfo);

}

4.动态Menu

onPrepareOptionsMenu()在菜单列表即将显示出来时决定哪些菜单要显示哪些不显示,当然也能够做一些其它工作。

public boolean onPrepareOptionsMenu(Menu menu) {

String currentText = textview.getText().toString();

if("M".equals(currentText)){

//先清掉菜单

menu.clear();

//能够通过点击这个菜单项来改变textview的值,这样(变成N)就能够測试了

MenuItem item = menu.add(0, 400, 401, "to N");

//android自带的图标

item.setIcon(android.R.drawable.alert_dark_frame);

}

if("N".equals(currentText)){

//先清掉菜单

menu.clear();

//能够通过点击这个菜单项来改变textview的值,这样(变成M)就能够測试了

MenuItem item = menu.add(0, 401, 402, "to M");

item.setIcon(android.R.drawable.alert_light_frame);

}

//如今共同拥有两个菜单子项

menu.add(0, 402, 403, "Now is " + currentText);

return super.onPrepareOptionsMenu(menu);

}

5.用XML文件方式创建Menu

在res/文件夹下建一个文件夹,名为menu,以下建一个xml文件,名为menu_xml_file.xml

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

<group android:id="@+id/grout_main">

<item android:id="@+id/menu_1"

android:title="This 1"/>

<item android:id="@+id/menu_2"

android:title="This 2" />

</group>

</menu>

在Activity中覆盖onCreateOptionsMenu(Menu menu)方法

public boolean onCreateOptionsMenu(Menu menu) {

//MenuInflater类用来实例化菜单XML文件成菜单对象

//获取当前菜单

MenuInflater inflater = getMenuInflater();

//inflate(int menuRes, Menu menu)填充菜单

//从一个指定的xml资源去填充菜单,假设有错误会抛掷InflateException

//menuRes 要载入XML布局文件里的资源ID

//menu 要填充的菜单,这些项目和子菜单就被加入到要填充菜单中

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

return true;

}

其它都和在Activity中创建Menu同样。

小知识:单击MENUbutton时,在Activity中回调的函数可能有两个:

第一个是onOptionsItemSelected(),这个函数仅仅在第一次单击当前应用中的MENUbutton时回调,以后再不回调。

第二个是onPrepareOptionsMenu(),这个函数在每次单击MENUbutton后显示MENU时被系统回调,每次MENU显示前都会回调此函数。我们一般依据条件改变MENU显示的逻辑都放在这个函数里面。

转自:http://zhouyuting714.blog.163.com/blog/static/1811643182011327101931489/

时间: 2024-11-19 19:46:58

Android学习之Menu的相关文章

Android学习笔记——Menu(二)

知识点: 这次将继续上一篇文章没有讲完的Menu的学习,上下文菜单(Context menu)和弹出菜单(Popup menu). 上下文菜单 上下文菜单提供对UI界面上的特定项或上下文框架的操作,就如同Windows中右键菜单一样. 在Android中,有两种提供上下文操作的方式:一种是在浮动的上下文菜单(长按弹出)中,另一种是上下文操作模式里. 那么怎样创建一个浮动的上下文菜单(floating context menu)呢? 1.调用registerForContextMenu()方法为V

Android学习笔记——Menu(三)

知识点 今天继续昨天没有讲完的Menu的学习,主要是Popup Menu的学习. Popup Menu(弹出式菜单) 弹出式菜单是一种固定在View上的菜单模型.主要用于以下三种情况: 为特定的内容提供溢出风格(overflow-style)的菜单进行操作. 提供其他部分的命令句(command sentence)如Add按钮可以用弹出菜单提供不同的Add的操作. 提供类似于Spinner的下拉式菜单但不保持持久的选择.                                      

Android学习笔记——Menu(一)

背景: Android3.0(API level 11)开始,Android设备不再需要专门的菜单键. 随着这种变化,Android app应该取消对传统6项菜单的依赖.取而代之的是提供anction bar来提供基本的用户功能. 创建3种基本的菜单 Options menu(选项菜单)和action bar 选项菜单是放置在app中具有全局影响的功能,例如“搜索”,“发邮件”,“设置”等 在Android3.0及以上,选项菜单被放置在action bar上. 创建一个选项菜单: 重写onCre

Android学习笔记——menu

该工程的功能是实现两个数相乘,并在另外一个Activity中显示计算的结果 以下的代码是MainActivity.java中的代码 package com.example.menu; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.v

Pro Android学习笔记(三三):Menu(4):Alternative菜单

什么是Alternative menu(替代菜单) 举个例子,Activity显示一个文本文件.如果用户想对文本文件进行编辑,Activity不提供编辑能力,但可由其他activity或者其他应用提供.我们将相关信息存储在一个intent中,例如该文本的Uri.这个intent可以匹配系统的多个应用,替代菜单将这些应用一一列出,菜单项的title就是该可被调用的activity的名字,图标也为该可被调用的activity的图表. 小例子说明 我们通过一个小例子进行学习,简单地打开一个URL:we

Pro Android学习笔记(三二):Menu(3):Context菜单

什么是Context menu 在桌面电脑,我们都很熟悉Context menu,按鼠标右键显示的菜单就是context菜单.在Android中,通过长时间鼠标按键可以触发context菜单.对于触屏设备,手指长按就是长鼠标按键事件. 一个activity有一个且只能有一个OptionMenu,一个view可以有一个且最多只能有一个ContextMenu.检查鼠标长按是基于view来监听.因此一个activity中可有多少个view,就可以有多少个ContextMenu. 注册View带有Con

【转】 Pro Android学习笔记(三一):Menu(2):扩展、图片、子菜单

目录(?)[-] 菜单扩展 菜单项加入图片 子菜单 菜单扩展 如果菜单项很多,超过六个时,就会采用菜单扩展模式.在例子中我加入了10个菜单项,预计能进入菜单扩展模式,但是实际效果如右图所示.效果和list非常相似,如果继续增加菜单项,可以通过上下拖动,来查看未能显示在屏幕上的菜单项.对于list模式,不能在菜单项中加入图标,也影响了我们下一步试验. 对于Android 4.0,系统缺省的UI风格有所变化,如果我们仍希望采用原有的显示方式,可以通过为Activity设置theme,指定风格,经过测

Android 学习笔记(二七):Menu

Menu由两种形式,Option menu和Context menu.前者是按下设备的Menu硬按钮弹出,后者是长按widget弹出. Option Menu 当我们按下Menu的硬件按钮时,Option Menu将被触发显示,最多可以显示6个选项的icon菜单,如果选项多于6个,第6个选项显示为“More“,点击可以进入扩展菜单.我们将在Android学习笔记(十一):Activity-ListView的例子一的基础上来学习Option Menu,也就是一个基于activity的菜单. 在这个

Android学习第二天:Toast(提醒)、Menu(菜单)、Intent的显式和隐式(包括打开、适配网站,调用拨号界面等)

1.Toast提醒 为昨天写的按钮程序添加一个提醒,在MainActivity中添加如下代码: Button bt1 = (Button) findViewById(R.id.button_1); bt1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Toast.makeText(MainActivity.this, "您点击了按钮1", Toast.