`
he91_com
  • 浏览: 411149 次
文章分类
社区版块
存档分类
最新评论

Android基础之Menu控件

 
阅读更多

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控件源码

    在Android开发中,Menu控件是构建用户交互界面不可或缺的一部分,它通常用于在应用程序的顶部显示选项,如在Activity的标题栏或者下拉菜单中。本文将深入探讨Android Menu控件的源码,理解其工作原理,以及如何在...

    Android_菜单(Menu)控件的使用.pdf

    在Android开发中,Menu控件是提供给用户进行选择操作的界面元素,开发者可以通过多种方式创建和管理菜单。本文档《Android_菜单(Menu)控件的使用.pdf》详细介绍了如何在Android应用程序中实现和使用菜单,下面将对...

    AndroidMenu控件Demo

    "AndroidMenu控件Demo"是一个专门演示如何在Android应用中使用Menu的实例,其中包含了详细的注释,方便开发者理解和学习。下面将详细介绍Menu控件的基本使用方法以及在Demo中的实现。 1. **Menu的创建**: - Menu...

    Androidx下控件版pathMenu源码

    在Androidx环境下,PathMenu控件的实现方式略有不同,主要是为了适应Android的新版本特性和性能优化。本文将深入探讨Androidx下的PathMenu控件,包括其源码解析、使用方法以及如何自定义以满足特定需求。 首先,...

    Android中的常用控件及其基本用法

    Android中的常用控件及其基本用法 TextView的使用方法 EditText的使用方法 Button的使用方法 Menu的使用方法 RadioGroup和RadioButton

    Android各种控件详解

    在Android应用开发中,构建用户界面是至关重要的一步,它涉及到与用户交互的各种控件。以下是对Android中常见控件的详细解释: 1. **文本框(TextView)**:TextView用于展示静态文本,可以在Activity中直接创建...

    Android源码——menu单选菜单.zip

    在Android应用开发中,Menu是用户界面中的一个重要组成部分,它提供了在特定屏幕或操作上下文之外展示更多选项的途径。本教程将深入探讨如何在Android系统中创建和使用单选菜单(Radio Menu)。 首先,单选菜单通常...

    一个Activity掌握Android4.0新控件

    在这个主题中,我们将深入探讨如何在一个Activity中运用Android 4.0(Ice Cream Sandwich)引入的新控件,提升用户界面的设计和功能。这些新控件包括Switch、Space、GridLayout、PopupMenu和TextureView。了解并熟练...

    Android第三方控件SwipeDelMenuLayout实现侧滑删除

    android:id="@+id/swipe_del_menu_layout" android:layout_width="match_parent" android:layout_height="wrap_content"&gt; &lt;!-- 内容视图 --&gt; android:id="@+id/content_view" android:layout_width="match_...

    Android代码-menu单选菜单.zip

    总之,Android的menu单选菜单是提高用户体验的关键元素之一。通过合理设计和实现,我们可以创建出功能丰富且易于操作的单选菜单,使得用户能够便捷地浏览和使用我们的应用。`menu单选菜单.zip`中的资源可能包含示例...

    Android 中常见控件参考手册-中文版

    Android应用开发中,控件是构建用户界面的基本元素,决定了应用的外观和功能。本文档旨在详细介绍Android中一些常见控件的使用方法,帮助开发者更好地理解和运用它们。 1. **TextView文本框**: - TextView是用于...

    android Accessibility无障碍服务实现获取系统全局任何控件的名称和坐标信息

    总结起来,Android 的 Accessibility 服务为我们提供了一个强大且灵活的接口,可以获取到系统全局任何控件的名称和坐标信息。通过适当地配置服务并监听 AccessibilityEvent,开发者可以实现各种自定义功能,增强应用...

    android 另类menu菜单提示

    但为了实现另类Menu,我们可以创建自己的布局文件,包含我们需要的按钮或其他控件,并在需要显示菜单时将其添加到界面上。这可以通过使用`LayoutInflater`来实现,将自定义布局加载到一个ViewGroup中,例如一个`...

    Android基础笔记

    Android 控件是 Android 应用的基础组件之一,用于描述用户界面的控件。 Android 提供了多种控件,如 Button、TextView、EditText 等,每种控件都有其特点和应用场景。 四、Spinner&AutoCompleteTextView&&适配器 ...

    Android菜单控件,可旋转,鸿洋大神菜单控件

    - **旋转与自转**:此控件的一个独特之处在于它支持菜单项的旋转和自转效果。当用户触发菜单时,菜单项会以特定的角度围绕中心图标进行旋转,增加了视觉吸引力和互动性。 - **自定义菜单数量**:开发者可以根据...

    Android 中常见控件参考手册

    ### Android中常见控件参考手册知识点详述...以上概述了Android中常见控件的基本知识,涵盖了从文本显示到复杂布局和交互的各种场景,对于开发者来说,熟练掌握这些控件的特性和使用方法,是构建高质量应用程序的基础。

    Android基本控件

    在Android应用开发中,基本控件是构建用户界面的基础元素,它们使得用户能够与应用程序进行交互。本节将深入探讨Android中的几个核心控件,包括标签(Label)、文本框(EditText)、单选框(RadioButton)、多选框...

    Android开源控件:圆形菜单Radial-menu-widget

    【Android开源控件:圆形菜单Radial-menu-widget】 在Android应用开发中,为了提供独特的用户交互体验,开发者经常需要寻找或自定义各种独特的控件。其中,圆形菜单(Radial Menu)是一种常见的设计模式,它将菜单...

    实验二-Android基本控件应用.docx

    文本控件是 Android 中最基本的控件之一,包括 TextView 和 EditText 两种。TextView 控件继承自 View 类,用于向用户显示文本内容,同时可以选择性地让用户编辑文本。EditText 控件继承自 TextView,允许用户编辑...

Global site tag (gtag.js) - Google Analytics