`

使用xml布局菜单

 
阅读更多
目前为止我们都是通过硬编码来增加菜单项的,android为此提供了一种更便利的方式,就是把menu也定义为应用程序的资源,通过android对资源的本地支持,使我们可以更方便地实现菜单的创建与响应。这一篇就介绍如何使用XML文件来加载和响应菜单,我们需要做这几步: 一般我们都是通过硬编码来增加菜单项的,例如我们之前介绍的。google为此提供了一种更便利的方式,就是
  1. 在/res目录下创建menu文件夹
  2. 在menu目录下使用与menu相关的元素定义xml文件,文件名任意,android会自动为其生成资源ID。例如:R.menu.itemmenu对应menu目录的itemmenu.xml资源文件
  3. 使用xml文件的资源ID,将xml文件中定义的菜单项添加到menu对象中去
  4. 响应菜单项时,使用每个菜单项对应的资源ID

(一)定义资源文件

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


编写main_menu.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添加菜单项

MenuInflate在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那样)。


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

(五)更多菜单资源的功能

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"/>

分享到:
评论

相关推荐

    VS2005-XML动态菜单

    2. **灵活性**:通过XML文件,用户可以自定义菜单布局,无需编程知识。 3. **扩展性**:XML的结构化特性使得添加新菜单项或扩展菜单结构变得简单。 实现这一功能的关键步骤如下: 1. **创建XML文件**:编写一个XML...

    as3+xml下拉菜单

    在本文中,我们将深入探讨如何使用ActionScript 3 (AS3) 和 XML 来创建一个灵活的下拉菜单。ActionScript 3 是Adobe Flash Professional和Flash Builder中的编程语言,而XML则是一种轻量级的数据交换格式,常用于...

    duilib入门和xml培训 布局案例

    - "duilib入门和xml培训 布局案例"可能包含一系列的示例项目,这些案例可以帮助理解各种布局的实际运用,如使用XML配置文件创建主窗口、菜单栏、工具栏等。 - 通过阅读和运行这些案例,学习者可以深入理解Duilib...

    CSS+JQuery+XML二级菜单

    在这个二级菜单中,XML文件(如menu.xml)可能包含了所有菜单项的结构和内容,如一级菜单和二级菜单的标题。JQuery可以通过Ajax调用来获取XML数据,然后解析这些数据以生成动态的菜单结构。这种方式的好处在于,菜单...

    在Activity中用xml添加菜单

    本篇文章将深入探讨如何在`Activity`中通过XML来创建和使用菜单。 首先,菜单的定义通常位于项目的`res/menu`目录下,这里会包含一个或多个XML文件,每个文件代表一个菜单资源。例如,在`Android_menu`压缩包中,...

    用C#与XML创建动态分层菜单.

    ### 使用C#与XML创建动态分层菜单 #### 引言 随着XML技术在软件开发领域的广泛应用,其作为数据交换和存储格式的价值日益凸显。本文详细介绍了一种利用C#编程语言、XML数据格式以及Microsoft .NET框架来创建动态...

    最新最实用的android菜单界面布局

    8. **无障碍支持**:菜单布局应考虑无障碍性,确保屏幕阅读器和其他辅助技术能正确读取菜单项,使用`android:contentDescription`属性为菜单项添加描述。 9. **响应式设计**:对于不同屏幕尺寸和方向,菜单布局需要...

    Android与XML编写菜单的例子.rar

    本示例主要关注如何使用XML和Java来编写Android应用程序中的菜单。让我们深入探讨一下这个话题。 首先,XML在Android中用于定义布局文件,这些文件描述了屏幕上的各种组件,如按钮、文本视图和菜单项。XML的结构化...

    TreeView+XML实现的菜单

    综上所述,这个示例展示了如何使用XML文件和`TreeView`控件在ASP.NET中构建动态菜单系统,通过编程方式解析XML数据,动态创建并填充`TreeView`节点,实现了数据和视图的分离,有利于代码的可读性和可维护性。

    JavaScript XML联动菜单

    在JavaScript XML联动菜单中,可能使用`XMLHttpRequest`或其现代替代品`fetch API`来获取XML文件。 5. **事件监听**:JavaScript通过监听用户的点击事件来触发联动行为。当用户在一级菜单中选择一个省份,...

    AS3+xml下拉菜单_下拉弹出框菜单

    5. **XML布局与样式**: XML不仅可以存储菜单结构,还可以包含样式信息。通过解析XML中的CSS样式,可以动态地为菜单项设置字体、颜色、大小等样式。这允许设计师和开发者分离UI逻辑,提高代码的可维护性和可重用性...

    从xml文档中读取菜单

    【从XML文档中读取菜单】的场景通常发生在软件开发中,尤其是Web应用程序,用于构建动态的用户界面。XML(eXtensible Markup Language)是一种数据交换格式,它允许结构化数据的存储和传输。本例中,XML文件被用来...

    s数型菜单,js+xml菜单,js+table菜单,js+div菜单,js菜单

    本主题将详细讨论几种使用JavaScript(js)实现的菜单技术,包括s数型菜单、js+xml菜单、js+table菜单、js+div菜单以及js菜单。我们将探讨每种方法的核心概念、优缺点以及如何实施。 首先,让我们来看看s数型菜单。...

    Android中使用xml文件定义菜单资源.pdf

    通过调用`MenuInflater`的`inflate()`方法,将XML菜单布局填充到`OptionsMenu`对象中。之后,可以使用`onOptionsItemSelected(MenuItem item)`方法处理用户对菜单项的选择。 6. **示例代码**: ```java @Override...

    无极flash+xml菜单

    MainStyle1可能负责处理菜单的整体样式和布局,而XDMenu则可能专注于菜单项的交互和动画效果。AS3的面向对象特性使得代码组织清晰,易于扩展。 2. **main.fla** 和 **main_style_1.fla**:这两个是Flash的工程文件...

    FLASH+XML菜单

    6. **菜单布局和样式**:通过XML,可以轻松改变菜单的结构和样式。例如,可以更改字体、颜色、大小或添加图像。这使得设计师能够独立于编程工作,专注于视觉设计。 7. **菜单的动态扩展**:由于XML的结构化特性,...

    c#递归遍历xml菜单

    本话题主要关注如何使用C#递归遍历XML菜单,这是一个常见的需求,例如在构建具有层级结构的网站导航或应用菜单时。以下将详细介绍这一主题。 首先,XML(Extensible Markup Language)是一种用于存储和传输结构化...

    《 Menu详解(二):利用XML生成菜单和子菜单》源码

    `getMenuInflater().inflate()`方法将XML布局加载到`Menu`对象中。返回`true`表示成功创建菜单。 当用户点击菜单项时,会调用`onOptionsItemSelected(MenuItem item)`方法,我们可以在这里处理用户的点击事件: ``...

    XML配置的QQ菜单程序

    3. 如果使用JavaScript解析XML,需确保浏览器兼容性,考虑使用DOM解析器或jQuery的`$.parseXML()`方法。 4. 考虑菜单的响应式设计,使菜单在不同设备和屏幕尺寸上都能良好地展现。 总之,XML配置的QQ菜单程序是一种...

    无限层级菜单xml实现

    HTML将解析XML数据并将其转化为可交互的菜单界面,CSS则负责美化菜单的显示效果,如颜色、字体、布局等。 4. **JavaScript**: "xmlTest.js" 可能包含JavaScript代码,用于处理XML数据并动态生成HTML菜单。...

Global site tag (gtag.js) - Google Analytics