android 菜单的总结

安卓菜单有三种菜单。

选项菜单: 点击系统菜单按钮会触发

上下文菜单:长按屏幕触发

子菜单:某一个菜单的下一级菜单

具体的描叙:http://blog.csdn.net/zqiang_55/article/details/7038085

写的简洁易懂。呵呵,其他的都太复杂了

我参考这个思路 写了一个演示代码。

package cn.wuwenfu.menudemo;

import com.example.menudemo.R;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
private Button contextMenuButton;//上下文菜单
private Button subMenuButton;//子菜单
private Button optionMenuButton;//选项菜单

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.mainactivity);

//获得3个按钮的控件
subMenuButton = (Button)this.findViewById(R.id.submenu_button);
contextMenuButton = (Button)this.findViewById(R.id.contextmenu_button);
optionMenuButton = (Button)this.findViewById(R.id.optionmenu_button);

}

@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();

contextMenuButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent in = new Intent();
in.setClass(MainActivity.this, ContextMenuActivity.class);
MainActivity.this.startActivity(in);

}
});

subMenuButton.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

Intent in = new Intent();
in.setClass(MainActivity.this, SubMenuActivity.class);
MainActivity.this.startActivity(in);

}
});

}

//选项菜单
//如果触屏的平板则要注意sdk版本,过高会导致看不到菜单的图标

//两种方法:第一种就是代码生成。第二种就是xml文件。
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub

//add方法参数说明:参数一是分组的id,参数二:菜单的ID(最重要);参数三:菜单的排序,默认值0表示按照添加的顺序显示
/*menu.add(0, 0, 0, "查看");
menu.add(0, 1, 0, "修改");
menu.add(0, 2, 0, "删除");

menu.add(1, 3, 0, "查看");
menu.add(1, 4, 0, "修改");
menu.add(1, 5, 0, "删除");

//隐藏分组0
menu.setGroupVisible(0, false);
*/

//第二种方式

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.option_menu, menu);

return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub

switch (item.getItemId()) {
/*
//是代码生成的,则是具体的数字
case 0:
Toast.makeText(MainActivity.this, "你点击率查看",
Toast.LENGTH_LONG).show();

return true;
case 1:
Toast.makeText(MainActivity.this, "你点击率修改",
Toast.LENGTH_LONG).show();

return true;
case 2:
Toast.makeText(MainActivity.this, "你点击率删除",
Toast.LENGTH_LONG).show();

return true;
case 3:
Toast.makeText(MainActivity.this, "你点击率查看1",
Toast.LENGTH_LONG).show();

return true;
case 4:
Toast.makeText(MainActivity.this, "你点击率修改1",
Toast.LENGTH_LONG).show();

return true;
case 5:
Toast.makeText(MainActivity.this, "你点击率删除1",
Toast.LENGTH_LONG).show();

return true;

*/

//上面的是基于add的菜单。下面的则是基于xml菜单
//由于这里采用的xml生成,id则必须是android:id对应的。
case R.id.menu1:
Toast.makeText(MainActivity.this, "菜单1", Toast.LENGTH_LONG).show();
return true;
case R.id.menu2:
Toast.makeText(MainActivity.this, "菜单2", Toast.LENGTH_LONG).show();
return true;
case R.id.menu3:
Toast.makeText(MainActivity.this, "菜单3", Toast.LENGTH_LONG).show();
return true;

}

return false;

}

}

选项菜单

package cn.wuwenfu.menudemo;

import com.example.menudemo.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.Toast;

public class SubMenuActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);

setContentView(R.layout.submenuactivity);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
int base = Menu.FIRST;
// 一个menu可以包括多个子菜单
SubMenu subMenu = menu.addSubMenu(0, base+1, Menu.NONE, "系统设置");
// 子菜单可以包括多个菜单项
MenuItem menuitem1 = subMenu.add(base, base+1, base+1, "显示设置");
subMenu.add(base, base+2, base+2, "网络设置");
subMenu.add(base, base+3, base+3, "高级设置");
subMenu.add(base, base+4, base+4, "安全设置");

// 显示菜单请返回true
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// TODO Auto-generated method stub
System.out.println("----->"+item.getGroupId());

//这里要先判断组id 再继续判断子菜单
switch (item.getGroupId()) {
case 1:
switch (item.getItemId()) {
case 2:
Toast.makeText(SubMenuActivity.this, "显示",
Toast.LENGTH_LONG).show();

return true;
case 3:
Toast.makeText(SubMenuActivity.this, "网络",
Toast.LENGTH_LONG).show();

return true;
case 4:
Toast.makeText(SubMenuActivity.this, "高级",
Toast.LENGTH_LONG).show();

return true;
case 5:
Toast.makeText(SubMenuActivity.this, "安全",
Toast.LENGTH_LONG).show();

return true;

}

return false;

default:
break;
}

return false;
}

}

子菜单

package cn.wuwenfu.menudemo;

/*
* 2014-05-23 16:08
* 实现的效果:一个listview。
* 上下文菜单: 删除 修改 查看
* */
import java.util.ArrayList;
import java.util.HashMap;

import com.example.menudemo.R;

import android.app.Activity;
import android.os.Bundle;

import android.util.Log;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.View.OnCreateContextMenuListener;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

public class ContextMenuActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.contextmenuactivity);

// 获得控件
ListView list = (ListView) findViewById(R.id.android_list1234);

// 数据
ArrayList<HashMap<String, Object>> listItem = new ArrayList<HashMap<String, Object>>();
for (int i = 0; i < 5; i++) {
HashMap<String, Object> m = new HashMap<String, Object>();
m.put("name", "吴文付" + i);//添加不同数据。
m.put("sex", "男");
m.put("age", "20");

listItem.add(m);
}

// 适配器
SimpleAdapter listItemAdapter = new SimpleAdapter(
// activity
this,
// 数据
listItem,
// 样式
R.layout.itemlist,
// 名称与样式的对应
new String[] { "name", "sex", "age" }, new int[] { R.id.name,
R.id.sex, R.id.age });

// 将适配器放入控件中,显示
list.setAdapter(listItemAdapter);

// 注册上下文菜单

// 第一种:通过监听事件
/*
* list.setOnCreateContextMenuListener( new
* OnCreateContextMenuListener() {
*
* @Override public void onCreateContextMenu(ContextMenu menu, View
* arg1, ContextMenuInfo arg2) { // TODO Auto-generated method stub
* menu.setHeaderTitle("上下文"); menu.add(0, 0, 0, "查看"); menu.add(0, 1,
* 0, "修改"); menu.add(0, 2, 0, "删除");
*
* } });
*/
// 第二种注册方法
registerForContextMenu(list);
}

// 上下文菜单,本例会通过长按条目激活上下文菜单
// 第二种注册方法需要它
@Override
public void onCreateContextMenu(ContextMenu menu, View view,
ContextMenuInfo menuInfo) {
menu.setHeaderTitle("上下文菜单");
// 添加菜单项
menu.add(0, 0, 0, "查看");
menu.add(0, 1, 0, "修改");
menu.add(0, 2, 0, "删除");
}

// 上下文菜单
// 菜单单击响应()
@Override
public boolean onContextItemSelected(MenuItem item) {
// 获取当前被选择的菜单项的信息
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
Log.i("braincol", String.valueOf(info.id));
System.out.println("-------->" + String.valueOf(info.id));

// 获得选中的视图对象
TextView tv = (TextView) info.targetView.findViewById(R.id.name);

switch (item.getItemId()) {
case 0:
// 在这里添加处理代码
Toast.makeText(ContextMenuActivity.this, "查看" + tv.getText(),
Toast.LENGTH_LONG).show();
break;
case 1:
// 在这里添加处理代码
Toast.makeText(ContextMenuActivity.this, "修改" + tv.getText(),
Toast.LENGTH_LONG).show();
break;
case 2:
// 在这里添加处理代码
Toast.makeText(ContextMenuActivity.this, "删除" + tv.getText(),
Toast.LENGTH_LONG).show();
break;
}
return true;
}

}

上下文菜单

工程截图:

运行效果截图:

工程地址:

http://download.csdn.net/detail/douniwan123654/7406031

android 菜单的总结,布布扣,bubuko.com

时间: 2024-08-24 13:56:05

android 菜单的总结的相关文章

Android菜单详解(一)——理解android中的Menu

前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu"键,由此可见菜单在Android程序中的特殊性.An

Android菜单简析02(ContextMenu)

在上一篇文章 Android 菜单简析01(OptionsMenu) 中给大家介绍了OptionsMenu 的使用,这篇接着给大家介绍下ContextMenu 的用法. ContextMenu 简称上下文菜单,通过长按事件响应,有两种响应模式 浮动模式 效果类似弹出的 Dialog,在屏幕的正中央,可以自定义显示的 Menu 以及 MenuItem 的响应 动作模式 通过ActionBar 实现,效果实在 Title 的地方,出现动作条. 特别注意 ContextMenu 的 动作模式 在 An

Android 菜单简析01(OptionsMenu)

Android 的菜单机制,在 Android 3.0 之前和之后有很大的去别,Android 3.0 推出 ActionBar ,导航的 UI 交互有很大的变化,但菜单的逻辑和接口还是一样的.这里主要介绍下 Android 菜单创建.使用,后面介绍 ActionBar,SherlockActionBar 与 菜单的结合使用,自定义菜单的创建. Android 菜单主要有4种: OptionMenu ContextMenu PopMenu SubMenu 下面先介绍下 OptionMenu ,分

Android菜单详解——理解android中的Menu

Android菜单详解--理解android中的Menu 前言 今天看了pro android 3中menu这一章,对Android的整个menu体系有了进一步的了解,故整理下笔记与大家分享. PS:强烈推荐<Pro Android 3>,是我至今为止看到的最好的一本android书,中文版出到<精通Android 2>. 理解Android的菜单 菜单是许多应用程序不可或缺的一部分,Android中更是如此,所有搭载Android系统的手机甚至都要有一个"Menu&qu

Android学习笔记(34):Android菜单

Android的菜单分为三种类型:选项菜单(Option Menu).上下文菜单(Context Menu).子菜单(Sub Menu). 选项菜单(Option Menu):按设备上的菜单按钮(Menu)会出现的菜单.不支持勾选标记. 上下文菜单(Context Menu):长按某个组件会出现的菜单.不支持菜单项图标. 子菜单(SubMenu):就是子菜单.不支持菜单项图标,不支持嵌套子菜单. Menu类用于添加菜单项和子菜单的方法是add()和addSubMenu(): MenuItem a

Android 菜单(OptionMenu)

菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu). 一.概述 public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu . public boolean onOptionsItemSelected(MenuItem item):选中菜单项后发生的动作. public void onOpti

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

Android 菜单(OptionMenu)大全 建立你自己的菜单

转自:http://www.cnblogs.com/salam/archive/2011/04/04/2005329.html 菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu).上下文菜单(ContextMenu)和子菜单(SubMenu),今天这讲是OptionsMenu 一.概述 public boolean onCreateOptionsMenu(Menu menu):使用此方法调用OptionsMenu . pub

&lt;Android&gt;菜单资源的使用

典型菜单资源结构:<menu>根元素且没有属性,在<menu>根元素里面会嵌套<item>和<group>子元素,<item>里面可以嵌套<menu>形成子菜单. <group>表示一个菜单组,相同的菜单组可以一起设置其属性,属性说明如下 id:唯一标示该菜单组的引用id meunCategory:对菜单进行分类,定义菜单的优先级,有效值为container,system,secondary和alternative. or