Android中的菜单

一个菜单中包括多个菜单项(MenuItem),在一个菜单中最多只会显示两行散列的菜单项,如果菜单项超过了六个,超过的会自动隐藏,会出现更多提示用户

在android中菜单一共分为三种:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)、和子菜单(SubMenu).

一:选项菜单

这个暂时不需要配置文件

只需在Activity中进行完成

package com.qn.menu;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.Toast;

public class MainActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.main);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {//设置多个菜单项

menu.add(Menu.NONE, Menu.FIRST+1, 5, "删除")

.setIcon(android.R.drawable.ic_menu_delete);

menu.add(Menu.NONE,Menu.FIRST+2,6,"保存")

.setIcon(android.R.drawable.ic_menu_save);

menu.add(Menu.NONE,Menu.FIRST+3,7,"帮助")

.setIcon(android.R.drawable.ic_menu_help);

menu.add(Menu.NONE,Menu.FIRST+4,8,"添加")

.setIcon(android.R.drawable.ic_menu_add);

menu.add(Menu.NONE,Menu.FIRST+5,9,"详情")

.setIcon(android.R.drawable.ic_menu_info_details);

menu.add(Menu.NONE,Menu.FIRST+6,10,"发送")

.setIcon(android.R.drawable.ic_menu_send);

menu.add(Menu.NONE,Menu.FIRST+7,11,"编辑")

.setIcon(android.R.drawable.ic_menu_edit);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {//判断菜单项的操作

switch (item.getItemId()) {

case Menu.FIRST+1:

Toast.makeText(MainActivity.this, "您选择了删除",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+2:

Toast.makeText(MainActivity.this, "您选择了保存",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+3:

Toast.makeText(MainActivity.this, "您选择了帮助",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+4:

Toast.makeText(MainActivity.this, "您选择了添加",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+5:

Toast.makeText(MainActivity.this, "您选择了详情",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+6:

Toast.makeText(MainActivity.this, "您选择了发送",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+7:

Toast.makeText(MainActivity.this, "您选择了编辑",
Toast.LENGTH_SHORT).show();

break;

}

return false;

}

@Override

public void onOptionsMenuClosed(Menu menu) {//菜单项关闭触发的操作

Toast.makeText(MainActivity.this, "选项菜单关闭了",
Toast.LENGTH_SHORT).show();

}

@Override

public boolean onPrepareOptionsMenu(Menu menu) {//菜单项显示前触发的操作

Toast.makeText(MainActivity.this, "在菜单显示",
Toast.LENGTH_SHORT).show();

return true;

}

}

结果

2.上面的菜单项的内容都是固定出现的,根据MVC模式肯定要通过配置文件完成,下面是通过配置文件完成。直接在res/menu/mymenu.xml文件

1.准备好资源配置文件

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

android:id="@+id/item01"

android:title="添加"

android:icon="@android:drawable/ic_menu_add"

/>

android:id="@+id/item02"

android:title="保存"

android:icon="@android:drawable/ic_menu_save"

/>

android:id="@+id/item03"

android:title="编辑"

android:icon="@android:drawable/ic_menu_edit"

/>

android:id="@+id/item04"

android:title="详情"

android:icon="@android:drawable/ic_menu_info_details"

/>

android:id="@+id/item05"

android:title="删除"

android:icon="@android:drawable/ic_menu_delete"

/>

android:id="@+id/item06"

android:title="发送"

android:icon="@android:drawable/ic_menu_send"

/>

android:id="@+id/item07"

android:title="帮助"

android:icon="@android:drawable/ic_menu_help"

/>

2.当准备好资源配置文件后

必须依靠MenuInflater类完成转换,此时只需要修改菜单的创建操作

package com.qn.m;

import android.app.Activity;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.Toast;

public class MainActivity extends Activity {

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

super.setContentView(R.layout.main);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {//设置多个菜单项

super.getMenuInflater().inflate(R.menu.mymenu, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {//判断菜单项的操作

switch (item.getItemId()) {

case Menu.FIRST+1:

Toast.makeText(MainActivity.this, "您选择了删除",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+2:

Toast.makeText(MainActivity.this, "您选择了保存",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+3:

Toast.makeText(MainActivity.this, "您选择了帮助",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+4:

Toast.makeText(MainActivity.this, "您选择了添加",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+5:

Toast.makeText(MainActivity.this, "您选择了详情",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+6:

Toast.makeText(MainActivity.this, "您选择了发送",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+7:

Toast.makeText(MainActivity.this, "您选择了编辑",
Toast.LENGTH_SHORT).show();

break;

}

return false;

}

@Override

public void onOptionsMenuClosed(Menu menu) {//菜单项关闭触发的操作

Toast.makeText(MainActivity.this, "选项菜单关闭了",
Toast.LENGTH_SHORT).show();

}

@Override

public boolean onPrepareOptionsMenu(Menu menu) {//菜单项显示前触发的操作

Toast.makeText(MainActivity.this, "在菜单显示",
Toast.LENGTH_SHORT).show();

return true;

}

}

结果

事例三:上下文菜单

上下文菜单非常类似于windows中右键菜单的操作形式,下面这个程序中我们要使用ListView与上下文菜单联系起来,但是要想使他们联系起来,则必须我们注册

registerForContextMenu(listView);//上下文菜单可以和listview融合在一起了

如下

只需要在Activity中完成

package com.qn.m;

import android.app.Activity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

public class MainActivity extends Activity {

private String data[]=new String[]{"IJRQN","未来的名字","迟早会实现的","这次上天不会了",

"我喜欢你很久了"};

private  ListView listView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

listView=new ListView(MainActivity.this);

listView.setAdapter(new ArrayAdapter(MainActivity.this,

android.R.layout.simple_expandable_list_item_1,data));

super.setContentView(listView);

registerForContextMenu(listView);//上下文菜单可以和listview融合在一起了

}

@Override

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case Menu.FIRST+1:

Toast.makeText(MainActivity.this, "您选择的是-添加联系人",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+2:

Toast.makeText(MainActivity.this, "您选择的是-查看详情",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+3:

Toast.makeText(MainActivity.this, "您选择的是-删除信息",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+4:

Toast.makeText(MainActivity.this, "您选择的是-另存为",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+5:

Toast.makeText(MainActivity.this, "您选择的是-编辑",
Toast.LENGTH_SHORT).show();

break;

default:

break;

}

return super.onContextItemSelected(item);

}

@Override

public void onContextMenuClosed(Menu menu) {

Toast.makeText(MainActivity.this, "上下文菜单关闭了",
Toast.LENGTH_SHORT).show();

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

super.onCreateContextMenu(menu, v, menuInfo);

menu.setHeaderTitle("信息提示");

menu.add(Menu.NONE, Menu.FIRST+1, 1, "添加联系人");

menu.add(Menu.NONE, Menu.FIRST+2, 2, "查看详情");

menu.add(Menu.NONE, Menu.FIRST+3, 3, "删除信息");

menu.add(Menu.NONE, Menu.FIRST+4, 4, "另存为");

menu.add(Menu.NONE, Menu.FIRST+5, 5, "编辑");

}

}

结果

事例四同样上下文菜单也可以通过配置文件完成

1.和menu菜单相同直接在res/menu/mymenu.xml文件

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

android:id="@+id/item02"

android:title="添加联系人"

/>

android:id="@+id/item03"

android:title="查看详情"

/>

android:id="@+id/item04"

android:title="删除信息"

/>

android:id="@+id/item05"

android:title="另存为"

/>

android:id="@+id/item06"

android:title="编辑"

/>

2.在Activity中完成代码

package com.qn.m;

import android.app.Activity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

public class MainActivity extends Activity {

private String data[]=new String[]{"IJRQN","未来的名字","迟早会实现的","这次上天不会了",

"我喜欢你很久了"};

private  ListView listView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

listView=new ListView(MainActivity.this);

listView.setAdapter(new ArrayAdapter(MainActivity.this,

android.R.layout.simple_expandable_list_item_1,data));

super.setContentView(listView);

registerForContextMenu(listView);//上下文菜单可以和listview融合在一起了

}

@Override

public boolean onContextItemSelected(MenuItem item) {

switch (item.getItemId()) {

case Menu.FIRST+1:

Toast.makeText(MainActivity.this, "您选择的是-添加联系人",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+2:

Toast.makeText(MainActivity.this, "您选择的是-查看详情",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+3:

Toast.makeText(MainActivity.this, "您选择的是-删除信息",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+4:

Toast.makeText(MainActivity.this, "您选择的是-另存为",
Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+5:

Toast.makeText(MainActivity.this, "您选择的是-编辑",
Toast.LENGTH_SHORT).show();

break;

default:

break;

}

return super.onContextItemSelected(item);

}

@Override

public void onContextMenuClosed(Menu menu) {

Toast.makeText(MainActivity.this, "上下文菜单关闭了",
Toast.LENGTH_SHORT).show();

}

@Override

public void onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

super.onCreateContextMenu(menu, v, menuInfo);

menu.setHeaderTitle("信息提示");

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

}

}

结果

三子菜单,当系统定义好菜单后也可以为每一个菜单里面定义多个子菜单

如下

完全是在Activity中完成

package com.qn.m;

import android.app.Activity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SubMenu;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

public class MainActivity extends Activity {

private String data[]=new String[]{"IJRQN","未来的名字","迟早会实现的","这次上天不会了",

"我喜欢你很久了"};

private  ListView listView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

listView=new ListView(MainActivity.this);

listView.setAdapter(new ArrayAdapter(MainActivity.this,

android.R.layout.simple_expandable_list_item_1,data));

super.setContentView(listView);

registerForContextMenu(listView);//上下文菜单可以和listview融合在一起了

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

SubMenu fileMenu=menu.addSubMenu("文件");

SubMenu editMenu=menu.addSubMenu("编辑");

fileMenu.add(Menu.NONE,Menu.FIRST+1,1,"新建");

fileMenu.add(Menu.NONE,Menu.FIRST+2,2,"打开");

fileMenu.add(Menu.NONE,Menu.FIRST+3,3,"保存");

fileMenu.add(Menu.NONE,Menu.FIRST+4,4,"撤销");

fileMenu.add(Menu.NONE,Menu.FIRST+5,5,"恢复");

return super.onCreateOptionsMenu(menu);

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {

case Menu.FIRST+1:

Toast.makeText(MainActivity.this, "添加联系人",

Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+2:

Toast.makeText(MainActivity.this, "查看详情",

Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+3:

Toast.makeText(MainActivity.this, "删除信息",

Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+4:

Toast.makeText(MainActivity.this, "另存为",

Toast.LENGTH_SHORT).show();

break;

case Menu.FIRST+5:

Toast.makeText(MainActivity.this, "编辑",

Toast.LENGTH_SHORT).show();

break;

}

return super.onContextItemSelected(item);

}

}

结果

四:子菜单也可以通过配置文件完成

在res/menu/filemenu.xml和res/menu/editmenu.xml文件

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

">

android:id="@+id/item01"

android:title="新建"

/>

android:id="@+id/item02"

android:title="打开"

/>

android:id="@+id/item03"

android:title="保存"

/>

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

">

android:id="@+id/item04"

android:title="撤销"

/>

android:id="@+id/item05"

android:title="恢复"

/>

2.在Activity完成代码

package com.qn.m;

import android.app.Activity;

import android.os.Bundle;

import android.view.ContextMenu;

import android.view.ContextMenu.ContextMenuInfo;

import android.view.Menu;

import android.view.MenuItem;

import android.view.SubMenu;

import android.view.View;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

public class MainActivity extends Activity {

private String data[]=new String[]{"IJRQN","未来的名字","迟早会实现的","这次上天不会了",

"我喜欢你很久了"};

private  ListView listView;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

listView=new ListView(MainActivity.this);

listView.setAdapter(new ArrayAdapter(MainActivity.this,

android.R.layout.simple_expandable_list_item_1,data));

super.setContentView(listView);

registerForContextMenu(listView);//上下文菜单可以和listview融合在一起了

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

SubMenu fileMenu=menu.addSubMenu("文件");

SubMenu editMenu=menu.addSubMenu("编辑");

getMenuInflater().inflate(R.menu.filemenu, fileMenu);

getMenuInflater().inflate(R.menu.editmenu, editMenu);

return super.onCreateOptionsMenu(menu);

}

}

结果

时间: 2024-10-07 06:55:10

Android中的菜单的相关文章

Android 中的菜单 OptionsMenu的简单应用

OptionsMenu就是安卓手机中的菜单选项 首先 要实现对菜单的操作就要先重写OnCreateOptionsMenu(Menu menu)方法 通常有两种方法来实现对菜单中选项的添加 第一种是动态添加:直接在OnCreateOptionsMenu方法中调用add方法 public boolean onCreateOptionsMenu(Menu menu) { menu.add(1,100,1,"菜单1"); menu.add(1,101,1,"菜单2"); m

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中的基本控件(下,章节摘要)

1,如果用户在一个屏幕上添加了多个组件,则可以使用ScrollView进行包装实现滚动的效果,但是ScrollView组件只能对一个组件进行包装. 2,ListView可以实现数据的列表显示,可以通过SimpleAdapter类实现数据的封装. 3,对话框可以进行信息的提示,用户可以使用系统定义的对话框显示,也可以通过布局管理器定义自己的对话框显示布局. 4,AutoCompleteTextView组件可以实现随笔提示功能. 5,SeekBar可以进行拖动条的实现,用户可以使用OnSeekBar

Android中的资源访问

Android中的资源是指非代码部分,指外部文件. assets中保存的一般是原生的文件,例如MP3文件,Android程序不能直接访问,必须通过AssetManager类以二进制流的形式来读取. res中的资源可以通过R资源类直接访问. R类是自动生成的,在该类中根据不同的资源类型生成了相应的内部类,该类包含了系统中使用到的所有资源文件的标识. 1.在代码中使用资源文件 在代码中访问资源文件,是通过R类中定义的资源文件类型和资源文件名称来访问的. 具体格式为: R.资源文件类型.资源文件名称

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

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

Android中的子菜单(SubMenu)使用案例

Android中创建子菜单的步骤: 1.覆盖Activity中的onCreateOptionMenu()方法,调用Menu的addSubMenu()方法添加子菜单. 2.调用SubMenu的add方法,添加子菜单. 3.覆盖onContextItemSelected()方法,响应子菜单. 来看个小例子: package com.yangzi.submenu; import android.os.Bundle; import android.app.Activity; import android

Android中的选项菜单(OptionMenu)使用案例

在Android中的每一个activity都捆绑了一个OptionMenu,它是通过调用OnCreateOptionMenu(Menu menu)函数来进行初始化,我们可以覆写这个函数,来设置一个activity的响应菜单.下面通过一个小例子来说明具体如何实现. package com.yangzi.optionmenu; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import

android中使用PopupWindow实现弹出窗口菜单

结合上篇android中使用ViewPager实现图片拖动,我们实现了点击“帮助”按钮的功能,这一篇则是接着上一篇,让我们一起来完成“我的”按钮的功能,这一功能,则是使用PopupWindow来实现弹出菜单. 再上项目结构图,如图: 从项目结构图可见,我们这里并没有新建新的Activity,因为“我的”按钮和“帮助”是在一个页面的,所以,我们只需新建一个效果图中的,弹出菜单的布局文件即可,即popup_menu.xml,代码如下: Xml代码 <? xml version = "1.0&q

android中RecyclerView控件实现长按弹出PopupMenu菜单功能

之前写过一篇文章:android中实现简单的聊天功能 现在是在之前功能的基础上,添加一个长按聊天记录,删除对应聊天记录的功能 RecyclerView控件,没有对应的长按事件,我们需要自己手工添加,修改对应的适配器类,注意红色内容为添加内容 ChatAdapter.java: package com.example.chenrui.app1; import android.support.annotation.NonNull; import android.support.v7.widget.R