Android基础之Menu操作详解
来源:互联网 发布:中科院软件所导师 编辑:程序博客网 时间:2024/06/07 02:42
菜单操作
菜单是一种常见的应用程序与用户交互的方式,它使用类似列表的形式显示用户可以操作的功能,而用户则可以通过菜单来选择要执行的操作,应用程序也可以对用户的选择进行相关的响应。Android系统中的菜单大致分为选项菜单、子菜单、上下文菜单。
1、菜单分为两种
1)系统菜单(选项菜单)
创建系统菜单:
1、重写Activity的 onCreateOptionsMenu方法
调用menu对象的add方法添加菜单项
2、定义menu资源
重写Activity的onCreateOptionsMenu方法
根据menu资源扩充菜单
系统菜单的单击事件处理
重写Activity的 onOptionsItemSelected方法
2)上下文菜单
创建上下文菜单
为事件源对象设置OnCreateContextMenuListener监听器
上下文菜单的单击事件处理
重写Activity的 onContextItemSelected方法
注意:
如果上下文菜单事件的事件源是AdapterView对象
则,可以将上下文菜单项(MenuItem)的
getMenuInfo方法的返回值强制转换为AdapterContextMenuInfo
·选项菜单(OptionsMenu)是通过点击设备上的Menu键弹出的菜单;
- 通过res/menu下的XML文件可以配置选项菜单
- 在Activity中的onOptionsItemSelected()方法将用于选项菜单中菜单项的响应。
- 通常在配置选项菜单时,需要为每个菜单项配置如下属性:
1.id:菜单项的ID标识,用于响应菜单项时,判断当前点击的那个菜单项;
2.orderInCategory:序号,即存在多个菜单项时的排序,取值为整数,数值越小,则越靠前显示,数值越大,则越靠后显示;
3.showAsAction:将菜单项显示在ActionBar上,取值为枚举类型,包括never(从不显示在ActionBar上),always(始终显示在ActionBar上),ifRoom,withText,collapseActionView;
4.title:菜单项上显示的文字。
使用程序代码创建选项菜单
·在Activity的onCreateOptionsMenu方法中,使用参数menu即可创建菜单项。
·Menu类中定义的创建菜单项的方法:
public MenuItem add(int groupId,int itemId,int order,CharSequence title)
参数:groupId:菜单项分组
itemId:ItemId资源索引
order:菜单项的排序(数值越小越靠前)
title:显示在菜单项的文字
public MenuItem add(int groupId,int itemId,int order,int titleRes)
·子菜单(SubMenu)是选择某个菜单项后,再次弹出的下级菜单。
·选项菜单的子菜单(SubMenu)亦可通过配置文件或程序代码创建:
- 通过配置文件创建子菜单:为原有的上级菜单项的item节点添加menu子节点,并在menu子节点下再添加若干个item节点进行配置;
- 通过程序代码创建子菜单:调用Menu对象的addSubMenu()创建一般菜单项,通过返回值SubMenu对象创建子菜单。
·上下文菜单(ContextMenu)是通过长按(通常是2秒)某个空间后显示的菜单;
·通过重写Activity的OnContextMenu()方法可以初始化上下文菜单,菜单项的创建方式与在选项菜单中创建菜单项相同;
·需要调用registerForContextMenu(View view)方法将上下文菜单注册到某个控件之上;
·通过重写Activity的onContextMenuSelected()方法可以响应上下文菜单的选中事件。
示例1(系统菜单):
menu:
<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_file" android:orderInCategory="1001" android:showAsAction="never" android:title="File"> <menu > <item android:id="@+id/file_new" android:orderInCategory="1" android:showAsAction="never" android:title="New"/> <item android:id="@+id/file_close" android:orderInCategory="2" android:showAsAction="never" android:title="Close"/> </menu> </item> <item android:id="@+id/action_edit" android:orderInCategory="1002" android:showAsAction="never" android:title="Edit"/> <item android:id="@+id/action_source" android:orderInCategory="1003" android:showAsAction="never" android:title="Source"/> <item android:id="@+id/action_search" android:orderInCategory="1004" android:showAsAction="never" android:title="Search"/> <item android:id="@+id/action_run" android:orderInCategory="1005" android:showAsAction="never" android:title="Run"/> <item android:id="@+id/action_help" android:orderInCategory="1006" android:showAsAction="never" android:title="Help"/></menu>
activity:
package com.example.menu;import android.os.Bundle;import android.app.Activity;import android.view.ContextMenu;import android.view.Menu;import android.view.MenuItem;import android.view.SubMenu;import android.view.View;import android.view.ContextMenu.ContextMenuInfo;import android.widget.TextView;import android.widget.Toast;public class MainActivity extends Activity { private static final int MENU_FILE = 123; private static final int MENU_EDIT = 124; private static final int MENU_RUN = 125; private static final int MENU_WINDOW = 126; private static final int MENU_HELP = 127; private static final int MENU_WINNDOW_SUB_FILE = 12341; private static final int MENU_WINNDOW_SUB_EDIT = 324; private static final int CONTENT_MENU_NAVIGATE = 765; private static final int CONTENT_MENU_REFACTOR = 7865; private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.textView1); registerForContextMenu(textView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); menu.add(Menu.FIRST, CONTENT_MENU_NAVIGATE, 1, "NAVIGATE"); menu.add(Menu.FIRST, CONTENT_MENU_REFACTOR, 1, "Refcator"); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case CONTENT_MENU_NAVIGATE: Toast.makeText(this, "你选择了-->NAVIGATE菜单项", Toast.LENGTH_LONG).show(); break; case CONTENT_MENU_REFACTOR: Toast.makeText(this, "你选择了-->REFACTOR菜单项", Toast.LENGTH_LONG).show(); break; } return super.onMenuItemSelected(featureId, item); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //getMenuInflater().inflate(R.menu.main, menu); menu.add(Menu.FIRST, MENU_FILE, 1, "File"); menu.add(Menu.FIRST, MENU_EDIT, 2, "Edit"); menu.add(Menu.FIRST, MENU_RUN, 3, "Run"); //menu.add(Menu.FIRST, MENU_WINDOW, 4, "Window"); menu.add(Menu.FIRST, MENU_HELP, 5, "Help"); SubMenu subMenu = menu.addSubMenu(Menu.FIRST, MENU_WINDOW, 4, "Window") ; subMenu.add(Menu.FIRST, MENU_WINNDOW_SUB_FILE, 1, "file"); subMenu.add(Menu.FIRST, MENU_WINNDOW_SUB_EDIT, 2, "edit"); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case MENU_FILE: break; case MENU_EDIT: Toast.makeText(this, "你选择了-->Edit文件", Toast.LENGTH_LONG).show(); break; case MENU_RUN: Toast.makeText(this, "你选择了-->Run文件", Toast.LENGTH_LONG).show(); break; case MENU_WINDOW: Toast.makeText(this, "你选择了-->Window文件", Toast.LENGTH_LONG).show(); break; case MENU_HELP: Toast.makeText(this, "你选择了-->Help文件", Toast.LENGTH_LONG).show(); break; case MENU_WINNDOW_SUB_EDIT: Toast.makeText(this, "你选择了-->MENU_WINNDOW_SUB_EDIT文件", Toast.LENGTH_LONG).show(); break; case MENU_WINNDOW_SUB_FILE: Toast.makeText(this, "你选择了-->MENU_WINNDOW_SUB_FILE文件", Toast.LENGTH_LONG).show(); break; } /*switch (item.getItemId()) { case R.id.action_file: Toast.makeText(this, "你选择了-->File文件", Toast.LENGTH_LONG).show(); break; case R.id.action_edit: Toast.makeText(this, "你选择了-->Edit文件", Toast.LENGTH_LONG).show(); break; case R.id.action_source: Toast.makeText(this, "你选择了-->Source文件", Toast.LENGTH_LONG).show(); break; case R.id.action_search: Toast.makeText(this, "你选择了-->Search文件", Toast.LENGTH_LONG).show(); break; case R.id.action_run: Toast.makeText(this, "你选择了-->Run文件", Toast.LENGTH_LONG).show(); break; case R.id.action_help: Toast.makeText(this, "你选择了-->Help文件", Toast.LENGTH_LONG).show(); break; } */ return super.onOptionsItemSelected(item); }}
示例2(上下文菜单)
package com.example.menu;import java.util.ArrayList;import java.util.List;import android.os.Bundle;import android.app.Activity;import android.view.ContextMenu;import android.view.ContextMenu.ContextMenuInfo;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.AdapterView.AdapterContextMenuInfo;import android.widget.ArrayAdapter;import android.widget.ListView;public class ListViewMenuActivity extends Activity { private static final int MENU_EDIT_ID = 0; private static final int MENU_DELETE_ID = 1; private List<String> datas; private ListView listView; private ArrayAdapter<String> adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_view_menu); listView = (ListView) findViewById(R.id.listView); datas=getData(); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, datas); listView.setAdapter(adapter); registerForContextMenu(listView); } @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; int position = info.position; String context = datas.get(position); menu.add(Menu.FIRST, MENU_EDIT_ID, 1, "Edit("+context+")"); menu.add(Menu.FIRST, MENU_DELETE_ID, 1, "Delete("+context+")"); } @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case MENU_EDIT_ID: break; case MENU_DELETE_ID: AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); int position = info.position; datas.remove(position); adapter.notifyDataSetChanged(); break; } return super.onMenuItemSelected(featureId, item); } private List<String> getData(){ List<String> data = new ArrayList<String>(); data.add("林俊杰"); data.add("张杰"); data.add("谢娜"); data.add("吉杰"); data.add("谢霆锋"); data.add("张卫健"); data.add("黄圣依"); data.add("崔健"); data.add("周杰伦"); data.add("许飞"); return data; }}
- Android基础之Menu操作详解
- android之menu详解
- Android基础之Menu控件
- android 基础 之 菜单 MENU
- Android Menu 之 optionsMenu 详解
- Android Menu 之 ContextMenu 详解
- Android按键之Menu详解
- Android Menu 之 optionsMenu 详解
- Android基础学习之Menu(菜单)
- Android UI 基础之 Menu使用大全
- android基础篇之菜单menu
- Android开发之——Menu 操作
- android menu 基础
- Android基础:Menu
- android Menu详解
- android Menu菜单详解
- Android menu菜单详解
- android menu详解
- 数据恢复流程
- ExtJS5 - 实现多表头Grid
- 欢迎使用CSDN-markdown编辑器
- LeetCode Maximum Depth of Binary tree
- 基础算法---冒泡排序法
- Android基础之Menu操作详解
- Tomcat中server.xml配置文件简介
- 产品的版本迭代机制是这样的
- java解析获取Excel中的数据--同时兼容2003及2007
- 前端构建工具gulpjs的使用介绍及技巧
- 文章标题
- 【转】java提高篇(五)-----抽象类与接口
- UIImageView的属性
- 安装HBase(使用hbase自带zookpeer)