`
zhouYunan2010
  • 浏览: 207664 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类

android小结(一)之menu

阅读更多
android提供有三种menu类型
一.Options Menu(选项菜单)
这是一组item选项的集合,当用户点击MENU button时,此menu就会出现。如果是3.0以后的版本可以通过action bar直接选择menu item
二.Context Menu(上下文菜单)
当用户长按住一个注册了上下文菜单的控件时,会弹出一个上下文菜单,它是一个流式的列表,供用户选择某项
三.Submenu(子菜单)
一个item项可以包含一个内嵌的子菜单


1.下面讲如何创建一个Options Menu菜单
通过xml布局文件创建菜单项
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/new_game"
          android:icon="@drawable/ic_new_game"       <!--菜单图标-->
          android:title="@string/new_game" />        <!--菜单文字-->
    <item android:id="@+id/help"
          android:icon="@drawable/ic_help"
          android:title="@string/help" />
</menu>

调用:重写acitvity的onCreateOptionsMenu方法创建菜单
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);
    return true;
}

你也可以直接调用menu的add方法直接添加菜单项。

options menu响应用户事件需重写activity的onOptionsItemSelected
@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);
    }
}

根据item id分别对选中某选项进行处理。return true表示自己已经处理此方法,不需要父类onOptionsItemSelected进行处理。
如果你有多个activity都有相同的menu,可以写一个activity实现onCreateOptionsMenu() and onOptionsItemSelected() 方法,然后其他activity继承此activity

在运行时改变menu item的状态
你需要重写onPrepareOptionsMenu() ,它方便你对item移除,添加,使不可用等
在android 2.3以下,当用户要每次打开menu时就会调用onPrepareOptionsMenu()方法
在android 3.0以上,你必须调用invalidateOptionsMenu() 当你要update你的menu时,因为
action bar是一直出现的。然后系统将调用onPrepareOptionsMenu()更改menu


2.创建一个Context Menu
上下文菜单相当于pc机上的点击鼠标右键弹出框。当用户长按一选项时,上下文菜单就会出现。你能为任何view创建一个上下文菜单,尽管Context Menu多用于listview。
要创建一个Context Menu,你首先必须为你的控件注册registerForContextMenu() ,并重写
onCreateContextMenu() and onContextItemSelected().
@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);
}

这里使用布局文件创建菜单项,跟options menu差不多。当然你同样可以使用menu.add()方法创建items。ContextMenu.ContextMenuInfo 对象将提供你选择的选项的额外信息,比如id
@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);
  }
}



3.创建submenu
A submenu is a menu that the user can open by selecting an item in another menu。
一个子菜单能够从另外一个菜单的选项中被打开。你能为任何一个menu添加子菜单,除了submenu。下面看看如何通过布局文件创建一个submenu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/file"
          android:icon="@drawable/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>


You can also use addSubMenu() to dynamically add a SubMenu to an existing Menu. This returns the new SubMenu object, to which you can add submenu items, using add()

4.其他的menu特性

Menu groups

通过组菜单,你可以同时对一组item进行操作,比如setGroupVisible(),setGroupEnabled(),setGroupCheckable()
下面给出一个包含组菜单的资源文件
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/item1"
          android:icon="@drawable/item1"
          android:title="@string/item1" />
    <!-- menu group -->
    <group android:id="@+id/group1">
        <item android:id="@+id/groupItem1"
              android:title="@string/groupItem1" />
        <item android:id="@+id/groupItem2"
              android:title="@string/groupItem2" />
    </group>
</menu>

3个item任然是一个兄弟菜单,不同的是你可以通过组操作一组item

Checkable menu items

通过布局文件创建Checkable menu,可以通过使用item的android:checkable属性
和group的android:checkableBehavior属性。例如
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="single">
        <item android:id="@+id/red"
              android:title="@string/red" />
        <item android:id="@+id/blue"
              android:title="@string/blue" />
    </group>
</menu>

APi中:
The android:checkableBehavior attribute accepts either:
single
    Only one item from the group can be checked (radio buttons)
all
    All items can be checked (checkboxes)
none
    No items are checkable
由于不会自动改变checkbox的状态,你必须设置checkbox的状态通过isChecked()和setChecked().
@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);
  }
}

如果你不手动设置它,当你点击一个选项时,checkbox或者radioButton的状态是不会改变的

Shortcut keys(热键)
你可以为你item设置快速点击热键
在配置文件中通过item的属性android:alphabeticShortcut 和 android:numericShortcut
类文件中通过setAlphabeticShortcut(char) and setNumericShortcut(char).设置的热键不区分大小写


Dynamically adding menu intents
有时候你希望使用menu item来启动一个activity通过intent。你能在onOptionsItemSelected()使用startActivity()
然而如果你不确定用户的移动设备是否拥有一个应用程序来处理这个intent,那么你可以使用Dynamically adding menu intents来决定是否添加此item
一个简单的实例
@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;
}

addIntentOptions()返回的是你添加的item的个数

Allowing your activity to be added to other menus
如果允许你的activity可以被别的menu添加,必须设置CATEGORY_ALTERNATIVE and/or CATEGORY_SELECTED_ALTERNATIVE values for the intent filter category
<intent-filter label="Resize Image">
    ...
    <category android:name="android.intent.category.ALTERNATIVE" />
    <category android:name="android.intent.category.SELECTED_ALTERNATIVE" />
    ...
</intent-filter>

还有一个notePad的示例我在研究研究

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android菜单(Menu)小结

    菜单是用户界面中最常见的元素之一,使用非常频繁,在Android中,菜单被分为如下三种,选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu).参考博客:...

    Android menu单选菜单.zip

    六、小结 Android的单选菜单为用户提供了一种优雅的方式来限制用户在一个预设的选项集中进行选择。通过定义XML资源,解析并显示菜单,以及监听菜单项的点击事件,开发者可以轻松地将单选菜单集成到自己的应用中。在...

    android开发揭秘PDF

    1.3 小结 第2章 Android开发环境搭建 2.1 Android开发准备工作 2.2 开发包及其工具的安装和 配置 2.2.1 安装JDK和配置Java开发 环境 2.2.2 Eclipse的安装与汉化 2.2.3 SDK和ADT的安装和 配置 2.3 创建第一个Android...

    《Android应用开发揭秘》附带光盘代码.

    《Android应用开发揭秘》全部实例源代码,配合《Android应用开发揭秘》使用 前言  第一部分 准备篇  第1章 Android开发简介  1.1 Android基本概念  1.1.1 Android简介  1.1.2 Android的系统构架 ... 17.4小结

    Android应用开发揭秘pdf高清版

    内容提要 --------------------------------------------------------------------------------  国内第一本基于Android 2.0的经典著作,5大专业社区联袂推荐,权威性毋庸置疑!《Android应用开发揭秘》...17.4小结

    《Android应用开发揭秘》源码

    作者简介  杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。... 17.4小结

    Android编程入门很简单.(清华出版.王勇).part1

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    让AndroidX86竖屏显示

    #### 小结 通过上述步骤,我们成功地将AndroidX86从默认的横屏显示模式改为竖屏显示模式。这一改变对于开发者来说尤为有用,因为它可以帮助他们在进行应用程序测试和调试时获得更佳的视觉体验。此外,对于那些想要在...

    疯狂Android讲义源码

     1.7 本章小结 33  第2章 Android应用的界面编程 35  2.1 界面编程与视图(View)组件 36  2.1.1 视图组件与容器组件 36  2.1.2 使用XML布局文件控制UI  界面 40  2.1.3 在代码中控制UI界面 41  2.1.4 使用...

    Android应用开发揭秘

    杨丰盛,Android应用开发先驱,对Android有深入研究,实战经验极其丰富。精通Java、C、C++等语言,专注于移动通信软件开发,在机顶盒软件开发和MTK平台软件开发方面有非常深厚的积累。2007年获得中国软件...17.4小结

    Android编程入门很简单.(清华出版.王勇).part2

    1.5小结 第2章搭建你的开发环境 2.1配置前的准备工作 2.1.1 Android支持的操作系统 2.1.2准备“四大法宝” 2.2安装并配置JDK 2.2.1 安装JDK 2.2.2配置JDK 2.3安装并配置Eclipse 2.3.1 运行Eclipse 2.3.2 了解Eclipse...

    实验一android开发环境搭建与hello.docx

    实验小结是 Android 编程基础、UI 设计的基本知识,掌握界面控件设计和控件的事件处理编程。通过本实验,学生可以了解 Android 应用开发程序的开发过程,生成 Android 应用程序框架以及配置相应的运行参数。

    最新的Android4.0模拟器教程.doc

    #### 四、小结 通过以上步骤,您已经成功地在电脑上安装了Android 4.0模拟器。该模拟器不仅能够帮助开发者进行应用程序的开发与测试,同时也能够让普通用户提前体验到这一版本带来的新功能和改进。尽管Android 4.0...

    Google.Android开发入门与实战

    内容简介  《Android开发入门与实战》内容上涵盖了用Android开发的大部分场景,从Android基础介绍、... 最后,祝广大开发者的技术日益精进,早日开始Android开发之旅,赶上移动互联网的第一班车,共赢中国3G未来!

    实验一Android开发环境搭建与Helloworld.doc

    实验小结: 通过实验,我们学习了搭建Android开发环境,了解Android应用开发的基本流程和基本概念,并掌握了Android应用开发的基本技能。实验结果表明,我们已经成功搭建了Android开发环境,实现了Hello World应用...

    android 搜索框

    ### 小结 Android中的搜索框可以通过XML布局或自定义布局实现,两者都能满足大部分需求。`SearchView`提供了丰富的功能,如搜索建议、查询事件监听等。通过适当地配置和集成,可以为应用程序带来高效且直观的搜索...

    Android典型技术模块开发详解

    目录 第一篇 Android开发初步 第1章 Android初识 1.1 Android简介 1.1.1 认识Android 1.1.2 Android系统框架 1.1.3 应用程序框架 1.2 Eclipse开发环境 1.2.1 安装ADT插件 1.2.2 安装SDK ...16.7 本章小结

    Google Android开发入门与实战的代码

    1.6 本章小结 6 第2章 工欲善其事 必先利其器——搭建Android开发环境 7 2.1 开发Android应用前的准备 7 2.1.1 Android开发系统要求 7 2.1.2 Android软件开发包 7 .2.1.3 其他注意事项 8 2.2 ...

Global site tag (gtag.js) - Google Analytics