Menu分为OptionMenu(点击MENU键时出现的菜单) ContextMenu(长点击一个菜单项时出现的菜单)
可以在XML文件中定义MENU,在res文件夹下建立menu目录,在下面定义菜单xml文件
<menu>必须是根目录,
其中每一个<item>是一个菜单项,也可以是一个<menu>来创建子菜单
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/file"
android:title="@string/file" >
<!-- "file" submenu -->
<menu>
<item android:id="@+id/create_new"
android:title="@string/create_new" />
<item android:id="@+id/open"
android:title="@string/open" />
</menu>
</item>
</menu>
<item>有诸多属性如
android:id 当用户点击这个事件的时候可以识别这个item
android:icon item的图标
android:title item的标题
OptionMenu的使用
创建一个OptionMenu可以重写onCreateMenuItem()方法,在其中进行add(),
也可以根据XML文件来生成
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater()
;
inflater.inflate(R.menu.game_menu, menu);
return true;
}
重写onOptionsItemSelected()方法来指定点击item后的操作
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.new_game:
newGame();
return true;
case R.id.help:
showHelp();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
如果要在activity的生命周期内动态更改OptionMenu,使用OnPrepareOptionsMenu(),而onCreateOptionsMenu()中add等操作之后,在activity整个生命周期中最好不变
ContextMenu的使用
通过调用registForContextMenu,把View传递进去进行注册,如果整个ListView或者GridView每一个item都需要一样的context menu,那就吧整个ListView,GridView传递给registerForContextMenu();
当一个item被长点击时,系统会调用onCreateContextMenu()
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
如果你的每一个item要调用不同的contextView可以在这里,利用参数View v,ContextMenuInfo menuInfo来进行生成不同的contextMenu
onContextItemSelected(MenuItem item)
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
switch (item.getItemId()) {
case R.id.edit:
editNote(info.id);
return true;
case R.id.delete:
deleteNote(info.id);
return true;
default:
return super.onContextItemSelected(item);
}
}
可以创建一个MenuGroup
<group android:id="@+id/group_delete">
<item android:id="@+id/menu_archive"
android:title="@string/menu_archive" />
<item android:id="@+id/menu_delete"
android:title="@string/menu_delete" />
</group>
这样可以对成组的多个item进行setGroupVisible() setGroupEnable() setGroupCheckable()
可以创建一个ContextMenu,每一项item都是可选中的
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single"> <!--single单个选中RadioButton all多个选中CheckBox none --!>
<item android:id="@+id/red"
android:title="@string/red" />
<item android:id="@+id/blue"
android:title="@string/blue" />
</group>
</menu>
当一项被选中的时候,调用onOptionItemSelected()方法,但是必须要手动设定其Checked状态
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.vibrate:
case R.id.dont_vibrate:
if (item.isChecked()) item.setChecked(false);
else item.setChecked(true);
return true;
default:
return super.onOptionsItemSelected(item);
}
}
如果不进行设定,用户选定的时候是不会变的...
当需要点击某个menuItem启动某个是自己应用的或者不是自己应用的Activity的时候,可以在回调方法中startActivity,
但如果不能确定是否有合适的activity或者有几个的时候,可以在onCreateOptionsMenu(Menu menu)中使用menu.addIntentOptions()方法
添加intent的category为 Intent.CATEGORY_ALTERNATIVE
@Override
public boolean onCreateOptionsMenu(Menu menu){
super.onCreateOptionsMenu(menu);
// Create an Intent that describes the requirements to fulfill, to be included
// in our menu. The offering app must include a category value of Intent.CATEGORY_ALTERNATIVE.
Intent intent = new Intent(null, dataUri);
intent.addCategory(Intent.CATEGORY_ALTERNATIVE);
// Search and populate the menu with acceptable offering applications.
menu.addIntentOptions(
R.id.intent_group, // Menu group to which new items will be added
0, // Unique item ID (none)
0, // Order for the items (none)
this.getComponentName(), // The current activity name
null, // Specific items to place first (none)
intent, // Intent created above that describes our requirements
0, // Additional flags to control items (none)
null); // Array of MenuItems that correlate to specific items (none)
return true;
}
当然,如果想让自己的Activity在menu中进行引用
<intent-filter label="@string/resize_image">
...
<category android:name="android.intent.category.ALTERNATIVE" />
<category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
...
</intent-filter>
ActionBar
contextual action mode fragement popupMenu等3.0之后才有的概念暂且不提
分享到:
相关推荐
在Android开发中,Menu控件是构建用户交互界面不可或缺的一部分,它通常用于在应用程序的顶部显示选项,如在Activity的标题栏或者下拉菜单中。本文将深入探讨Android Menu控件的源码,理解其工作原理,以及如何在...
在Android开发中,Menu控件是提供给用户进行选择操作的界面元素,开发者可以通过多种方式创建和管理菜单。本文档《Android_菜单(Menu)控件的使用.pdf》详细介绍了如何在Android应用程序中实现和使用菜单,下面将对...
"AndroidMenu控件Demo"是一个专门演示如何在Android应用中使用Menu的实例,其中包含了详细的注释,方便开发者理解和学习。下面将详细介绍Menu控件的基本使用方法以及在Demo中的实现。 1. **Menu的创建**: - Menu...
在Androidx环境下,PathMenu控件的实现方式略有不同,主要是为了适应Android的新版本特性和性能优化。本文将深入探讨Androidx下的PathMenu控件,包括其源码解析、使用方法以及如何自定义以满足特定需求。 首先,...
Android中的常用控件及其基本用法 TextView的使用方法 EditText的使用方法 Button的使用方法 Menu的使用方法 RadioGroup和RadioButton
在Android应用开发中,构建用户界面是至关重要的一步,它涉及到与用户交互的各种控件。以下是对Android中常见控件的详细解释: 1. **文本框(TextView)**:TextView用于展示静态文本,可以在Activity中直接创建...
在Android应用开发中,Menu是用户界面中的一个重要组成部分,它提供了在特定屏幕或操作上下文之外展示更多选项的途径。本教程将深入探讨如何在Android系统中创建和使用单选菜单(Radio Menu)。 首先,单选菜单通常...
在这个主题中,我们将深入探讨如何在一个Activity中运用Android 4.0(Ice Cream Sandwich)引入的新控件,提升用户界面的设计和功能。这些新控件包括Switch、Space、GridLayout、PopupMenu和TextureView。了解并熟练...
android:id="@+id/swipe_del_menu_layout" android:layout_width="match_parent" android:layout_height="wrap_content"> <!-- 内容视图 --> android:id="@+id/content_view" android:layout_width="match_...
总之,Android的menu单选菜单是提高用户体验的关键元素之一。通过合理设计和实现,我们可以创建出功能丰富且易于操作的单选菜单,使得用户能够便捷地浏览和使用我们的应用。`menu单选菜单.zip`中的资源可能包含示例...
Android应用开发中,控件是构建用户界面的基本元素,决定了应用的外观和功能。本文档旨在详细介绍Android中一些常见控件的使用方法,帮助开发者更好地理解和运用它们。 1. **TextView文本框**: - TextView是用于...
总结起来,Android 的 Accessibility 服务为我们提供了一个强大且灵活的接口,可以获取到系统全局任何控件的名称和坐标信息。通过适当地配置服务并监听 AccessibilityEvent,开发者可以实现各种自定义功能,增强应用...
但为了实现另类Menu,我们可以创建自己的布局文件,包含我们需要的按钮或其他控件,并在需要显示菜单时将其添加到界面上。这可以通过使用`LayoutInflater`来实现,将自定义布局加载到一个ViewGroup中,例如一个`...
Android 控件是 Android 应用的基础组件之一,用于描述用户界面的控件。 Android 提供了多种控件,如 Button、TextView、EditText 等,每种控件都有其特点和应用场景。 四、Spinner&AutoCompleteTextView&&适配器 ...
- **旋转与自转**:此控件的一个独特之处在于它支持菜单项的旋转和自转效果。当用户触发菜单时,菜单项会以特定的角度围绕中心图标进行旋转,增加了视觉吸引力和互动性。 - **自定义菜单数量**:开发者可以根据...
### Android中常见控件参考手册知识点详述...以上概述了Android中常见控件的基本知识,涵盖了从文本显示到复杂布局和交互的各种场景,对于开发者来说,熟练掌握这些控件的特性和使用方法,是构建高质量应用程序的基础。
在Android应用开发中,基本控件是构建用户界面的基础元素,它们使得用户能够与应用程序进行交互。本节将深入探讨Android中的几个核心控件,包括标签(Label)、文本框(EditText)、单选框(RadioButton)、多选框...
【Android开源控件:圆形菜单Radial-menu-widget】 在Android应用开发中,为了提供独特的用户交互体验,开发者经常需要寻找或自定义各种独特的控件。其中,圆形菜单(Radial Menu)是一种常见的设计模式,它将菜单...
文本控件是 Android 中最基本的控件之一,包括 TextView 和 EditText 两种。TextView 控件继承自 View 类,用于向用户显示文本内容,同时可以选择性地让用户编辑文本。EditText 控件继承自 TextView,允许用户编辑...