Android菜单项内容大全,android菜单项大全
一、介绍:
菜单是许多应用中常见的用户界面组件。
Android3.0版本以前,Android设备会提供一个专用“菜单”按钮呈现常用的一些用户操作,
Android3.0版本以后,取而代之的是提供一个操作栏来完成“菜单”的功能
关于菜单的官方介绍:<https://developer.android.com/guide/topics/ui/menus.html>
二、分类:
1、OptionsMenu(选项菜单)
Android 2.3.X或更低版本 Android3.0及更高版本
Android 2.3.X或更低版本,当用户按“菜单”按钮(实体按钮)时,选项菜单的内容会出现在屏幕底部;
Android3.0及更高版本,则选项菜单中的项目将出现在操作栏中。默认情况下,系统会将所有项目均放入操作溢出菜单中。用户可以使用操作栏右侧的操作溢出菜单图标(或者,通过按设备“菜单”按钮(如有))显
示操作溢出菜单。但是可以通过在tem中android:showAsAction = “ifRoom”将菜单选项直接提升到操作栏中去显示。
*:并不是所有的app都会有菜单出现在操作栏中的,这取决于app的设计,如果app是需要自己的操作栏,那么根据自己的需求设计,如果是系统默认的操作栏,那么就会有菜单。
---通过重写 onCreateOptionsMenu()创建选项菜单,您可以将菜单资源(使用 XML 定义)扩充到回调中提供的 Menu 中:
Eg:
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); //add新增菜单 menu.add("新增选项菜单"); //效果一样,都直接加的一级菜单 menu.addSubMenu("新增选项菜单子菜单"); //查询修改属性 menu.findItem(R.id.action_settings).setTitle("设置"); return true; }
---处理点击事件:用户从选项菜单中选择项目(包括操作栏中的操作项目)时,系统将调用 Activity 的 onOptionsItemSelected() 方法。此方法将传递所选的 MenuItem。您可以通过调用 getItemId() 方法来
识别项目,该方法将返回菜单项的唯一 ID,您可以将此 ID 与已知的菜单项匹配,以执行适当的操作。
Eg:
public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.new_game: newGame(); return true; case R.id.help: showHelp(); return true; default: return super.onOptionsItemSelected(item); } }
2、ContextMenu(上下文菜单)
上下文菜单提供了许多操作,这些操作影响 UI 中的特定项目或上下文框架。您可以为任何视图提供上下文菜单,但这些菜单通常用于 ListView、GridView 或用户可直接操作每个项目的其他视图集合中的项目。
Android系统提供上下文操作的方法有2种:
(1)使用浮动上下文菜单
用户长按(按住)一个声明支持上下文菜单的视图时,菜单显示为菜单项的浮动列表(类似于对话框)。 用户一次可对一个项目执行上下文操作。比如:
创建浮动上下文菜单步骤:
1、通过调用 registerForContextMenu(),绑定菜单给具体的view。如果view是listview或者gridview,那么菜单将绑定给所有item。
2、在 Activity 中实现 onCreateContextMenu() 方法。
当注册后的视图收到长按事件时,系统将调用您的 onCreateContextMenu() 方法。在此方法中,您通常可通过扩充菜单资源来定义菜单项。比如:
3、实现 onContextItemSelected()。用户选择菜单项时,系统将调用此方法,以便您能够执行适当的操作。 例如:
public boolean onContextItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.context_menu_1: Toast.makeText(getApplicationContext(), "选择菜单1,你要做什么,自己做...", 0).show(); return true; default: return super.onContextItemSelected(item); } }
(2) 使用上下文操作模式
将在屏幕顶部显示上下文操作栏,其中包括影响所选项的操作项目。当此模式处于活动状态时,用户可以同时对多项执行操作(如果应用允许)。比如:
创建上下文操作模式菜单步骤:
A:为单个视图启用上下文操作模式
1:实现ActionMode.Callback接口。在其回调方法中,您既可以为上下文操作栏指定操作,又可以响应操作项目的点击事件。
2:当需要显示操作栏时(例如,用户长按视图),调用startActionMode()。比如:
private ActionMode.Callback mActionModeCallback = new ActionMode.Callback() { /** * onCreateActionMode()之后调用,返回false表示什么也不做。 */ @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { //方便内存回收 actionMode = null; } /** * 当actionmode被创建,startActionMode()方法被调用,回调此方法 * 在这里可以为上下文操作模式绑定菜单 */ @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater menuInflater = mode.getMenuInflater(); menuInflater.inflate(R.menu.context_menu, menu); return true; } /** * 当actionMode绑定的上下文菜单被点击的时候的回调 */ @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.context_menu_1: //选中菜单1,我就把button2的文字改一下好了.. button2.setText(item.getTitle()); //完成菜单的任务之后,最好销毁一下actionMode对象,不要长期占用内存 actionMode.finish(); return true; default: return false; } } };
B:在 ListView 或 GridView 中有一组项目(或 AbsListView 的其他扩展),且需要允许用户执行批处理操作。
步骤:
1:使用 setMultiChoiceModeListener()设置AbsListView.MultiChoiceModeListener 接口的实现类对象。
2:使用 setChoiceMode()设置选择模式为 CHOICE_MODE_MULTIPLE_MODAL;
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
Eg:
lv = (ListView) findViewById(R.id.lv); strings = new ArrayList<String>(); strings.add("item1"); strings.add("item2"); strings.add("item3"); adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, strings); lv.setAdapter(adapter); // 设置上下文操作模式 lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); lv.setMultiChoiceModeListener(new MultiChoiceModeListener() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { MenuInflater menuInflater = mode.getMenuInflater(); menuInflater.inflate(R.menu.context_menu, menu); return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { Log.v("zoubo", "onActionItemClicked.."); switch (item.getItemId()) { case R.id.context_menu_1: // 选中菜单1,新增一个item strings.add("item4"); adapter.notifyDataSetChanged(); // 局部的mode,不需要维护其生命周期 // mode.finish(); return true; default: return false; }