`

Android菜单详解(五)——使用XML生成菜单

阅读更多

回顾前面的几篇,我们都是直接在代码中添加菜单项,给菜单项分组等,这是比较传统的做法,它存在着一些不足。比如说,为了响应每个菜单项,我们需要用常量来保存每个菜单项的ID等。为此,Android提供了一种更好的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响应菜单,我们需要做这几步:

  1. 在/res目录下创建menu文件夹
  2. 在menu目录下使用与menu相关的元素定义xml文件,文件名是随意的,android会自动为其生成资源ID。例如:R.menu.mainmenu对应menu目录的mainmenu.xml资源文件
  3. 使用xml文件的资源ID,将xml文件中定义的菜单项添加到menu对象中
  4. 响应菜单项时,使用每个菜单项对应的资源ID

下面就使用xml的方式完成《Android菜单详解(二)——创建并响应选项菜单》中的options menu。

定义菜单资源文件

在res目录下创建menu文件夹,在menu下创建一个xml资源文件,我这里叫做mainmenu.xml

编写mainmenu.xml如下:

复制代码
<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:android="http://schemas.android.com/apk/res/android">
  <!-- group1 -->
  <group android:id="@+id/group1">
      <item android:id="@+id/mi1"
          android:title="item1"/>
      <item android:id="@+id/mi2"
          android:title="item2"/>
  </group>
  <!-- group 2 -->
  <group android:id="@+id/group2">
      <item android:id="@+id/mi3"
          android:title="item3"/>
      <item android:id="@+id/mi4"
          android:title="item4"/>
  </group>
  
</menu>
复制代码

这里简单的添加了4个菜单项,并将其分为2组。item元素的android:title值可以引用values中的string资源。

使用MenuInflater添加菜单项

inflater在android中建立了从资源文件到对象的桥梁,MenuInflater即把菜单xml资源转换为对象并添加到menu对象中,它可以通过activity的getMenuInflater()得到。我们在MainActivity中重写onCreateOptionsMenu(...)方法。

@Override
publicboolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.mainmenu, menu);
    returntrue;
}

响应菜单项

最后重写onOptionsItemSeleted(...)方法。

复制代码
@Override
publicboolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
    case R.id.mi1:
        // do sth
break;
    case R.id.mi2:
        // do sth
break;
    case R.id.mi3:
        // do sth
break;
    case R.id.mi4:
        // do sth
break;
    }
    returntrue;
}
复制代码

这一步最大的体现了使用XML生成菜单的好处。android不仅为我们定义的xml文件生成了资源ID,同样可以为group,menu item来自动生成ID(就像为布局中定义的view生成id那样)。这样菜单项ID的创建与管理就不用我们操心了,全部交给android去做吧!

至此,我们完成了一个简单的“使用XML生成菜单”的demo,并从中体会到了使用资源文件的好处,因此这是android中创建菜单的推荐方式。实际上,我们在代码中对菜单项或分组的操作都能在xml文件中完成,下面就简单介绍一些比较常用的功能。(谷歌提供的API demos中有最全面的示例)

更多菜单资源文件的功能

1.资源文件实现子菜单

子菜单通过在item元素中嵌套menu来实现。

复制代码
<item android:title="系统设置">
    <menu>
        <item android:id="@+id/mi_display_setting"
            android:title="显示设置"/>
        <item android:id="@+id/mi_network_setting"
            android:title="网络设置"/>
        <!-- 别的菜单项 -->
    </menu>
</item>
复制代码

2.为菜单项添加图标

<item android:id="@+id/mi_exit"
    android:title="退出"
    android:icon="@drawable/exit"/>

3.设置菜单项的可选出现

使用android:checkableBehavior设置一组菜单项的可选策略,可选值为:none, all, single

<group android:id="..."
    android:checkableBehavior="all">
    <!-- 菜单项 -->
</group>

使用android:checked设置特定菜单项

<item android:id="..."
    android:title="sometitle"
    android:checked="true"/>

4.设置菜单项可用/不可用

<item android:id="..."
    android:title="sometitle"
    android:enabled="false"/>

5.设置菜单项可见/不可见

<item android:id="..."
    android:title="sometitle"
    android:visible="false"/>

结语

本篇是Android菜单详解系列的最后一篇,本系列详细介绍了android中各种常用菜单的使用技巧和注意事项,希望能帮助大家更好的理解,也期待与各位交流开发中的心得:)

分享到:
评论

相关推荐

    android 各种菜单详解 经典完整代码

    Android菜单主要有三种类型:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和弹出式菜单(PopupMenu)。选项菜单通常显示在屏幕顶部,与设备的硬件菜单按钮或虚拟菜单按钮关联;上下文菜单在长按某项内容时...

    安卓Android源码——MenuSample.rar

    描述中的"安卓Android源码——MenuSample.rar"与标题一致,再次强调这是一个与Android菜单相关的源码样本。rar文件是常见的压缩格式,通常包含一系列的源代码文件,如Java类文件、XML布局文件等,用于展示Menu功能的...

    安卓Android源码——圆环菜单,只有你想不到的,没有做不到的.zip

    标题"安卓Android源码——圆环菜单,只有你想不到的,没有做不到的.zip"表明这是一个关于Android平台的开发项目,重点在于实现了一种创新的交互方式——圆环菜单。这种菜单设计通常用于提供一种独特且直观的用户界面...

    android猜拳游戏

    在Android中,UI设计通常使用XML布局文件完成。猜拳游戏的UI需要包含玩家和计算机的选择显示区,以及结果显示区域。可以使用ImageView展示石头、剪刀、布的图片,TextView用于显示结果。此外,按钮设计用于用户输入...

    一个简单的基于 Material Design 的 Android SearchView_Kotlin

    **Android SearchView 使用详解——基于 Material Design 的 Kotlin 实现** 在 Android 应用开发中,SearchView 是一个非常重要的组件,它提供了用户友好的搜索功能,可以方便地集成到应用的导航栏或工具栏中。本...

    droiddraw-r1b8

    《Android界面设计利器——DroidDraw-r1b8详解》 在Android应用开发过程中,界面设计是至关重要的一环。为了帮助开发者更高效地创建和预览界面,诞生了一款名为DroidDraw的工具,其r1b8版本更是受到众多开发者的...

    新版Android开发教程+笔记11--可视化UI设计DroidDraw

    DroidDraw是一款功能强大的基于Java Swing的Android界面设计器,其主要作用是帮助开发者快速生成复杂的Android Layout XML文件。对于初学者或希望提高UI设计效率的开发者来说,DroidDraw提供了一个直观的可视化环境...

    eclipse 结合Android开发插件ADT-0.9.3

    **Eclipse结合Android开发插件ADT-0.9.3详解** 在Android应用开发领域,Eclipse是一款广泛使用的集成开发环境(IDE),它提供了强大的代码编辑、调试和项目管理功能。然而,为了专门针对Android平台进行开发,我们...

    面向对象课程设计-Android手机音乐播放器.doc

    【Android手机音乐播放器开发详解】 本篇将详细介绍如何进行一个面向对象的课程设计,以Android手机音乐播放器为例,涵盖其主要功能实现、所需技术、设计思路以及常见问题的解决办法。 一、项目背景与目标 面向...

    android打飞机小游戏

    《Android打飞机小游戏详解——基于SurfaceView与Thread的实现》 在移动设备上,小游戏一直深受用户喜爱,其中“打飞机”游戏凭借其简单的操作和趣味性,成为了开发者和玩家的经典选择。本篇文章将深入探讨如何使用...

    Darry_R-Studensystem-master.zip

    《移动点餐系统开发详解——基于Android Studio》 在当今数字化时代,移动点餐系统已经成为了餐饮行业不可或缺的一部分。本文将深入探讨一个基于Android Studio开发的移动点餐系统——"Darry_R-Studensystem-master...

    连连看.rar

    - 将应用打包成APK,通过Google Play或其他分发渠道发布,也可通过Android Studio的Build菜单生成签名APK。 总结,开发Android版“连连看”游戏需要掌握Android Studio的基本使用,理解布局设计,熟悉Android的...

    Unity3D 切水果游戏 项目文件

    Unity3D提供了一套完整的目标平台设置,包括AndroidManifest.xml的配置,确保游戏能在各种Android设备上运行。同时,还需要进行性能优化,减少内存占用,提升帧率,保证游戏体验。 至于Windows平台,Unity3D支持...

    PizzaRoulette:适用于PizzaRoulette的简单Android应用

    开发者可能使用了Android Studio提供的布局工具,如XML布局文件,来设计美观且易于操作的界面。按钮、图片和文本的合理布局,以及与用户的交互反馈,都是提升用户体验的重要因素。例如,比萨图片的展示可以使用...

    AdmissionNews_2

    完成开发后,通过Android Studio的Build菜单生成APK文件,然后通过Google Play或其他分发平台发布。同时,持续维护和更新应用,修复可能出现的问题,添加新功能,以满足用户需求。 总结,开发"AdmissionNews_2"这样...

Global site tag (gtag.js) - Google Analytics