`

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

分享到:
评论

相关推荐

    在Activity中用xml添加菜单

    在Activity中用xml添加菜单,是非常常用的一种写菜单的方法。

    Andriod 下拉多选菜单(布局可以自己写xml)

    Andriod 下拉多选菜单(布局可以自己写xml).

    安卓课程设计外卖/网上商城(含报告)

    Google 给我们提供的一个专门用于底部导航的 View,菜单在xml布局使用,注意的就是 app:menu 属性,它指定了导航栏显示的页面菜单是怎样的。 2.掌握自定义布局。创建自定义布局的步骤:编写一个自定义xml布局,将这...

    CircularLayout-另一个圆形转盘布局菜单.zip

    另一个圆形转盘布局菜单,可自定义菜单的偏移、半径、item数。item在布局旋转的时候也会跟着改变自己的角度。项目地址:https://github.com/xresco/CircularLayout 效果图:如何使用xml中创建实例  android:id="@ ...

    【android编程】 第六讲-Android菜单布局及使用

    res/menu目录建立xml文件包含一下几个元素: :定义一个Menu,是一个菜单资源文件的根节点,里面可以包含一个或者多个和元素。 :创建一个MenuItem,代表了菜单中一个选项。 :对菜单项进行分组,可以以组的形式...

    基于Android的卫星菜单按钮实现

    * (1)自定义属性:a、创建attr.xml文件 b、在布局中使用 c、在自定义控件中解析使用 * (2)重写onMeasure与onLayout方法,设置菜单按钮的布局位置 * 2、定位Item(设置每一个菜单项的位置) * 3、展开Item(动画...

    《CSS网站布局实战》—实例源码包

    文本、图像、超链接、列表、菜单、网站导航、表单、数据表格、浮动布局等CSS布局控制。)智能、创造型布局思维(智慧、完美视觉艺术效果之CSS布局技巧、CSS Hack实践战略),Web技术团队倾情奉献(来自CSS布局与Web...

    CSS网站布局实录 (第二版)

    文本、图像、超链接、列表、菜单、网站导航、表单、数据表格、浮动布局等CSS布局控制。),智能、创造型布局思维(智慧、完美视觉艺术效果之CSS布局技巧、CSS Hack实践战略),Web技术团队倾情奉献(来自CSS布局与Web标准...

    Android实现自定义的卫星式菜单(弧形菜单)详解

    在布局中使用自定义属性  c. 在自定义View中读取布局文件中的自定义属性 (2)onMeasure 测量 child 即测量主按钮以及菜单项 (3)onLayout 布局 child 即布局主按钮以及菜单项 (4)设置主按钮的选择动画  ...

    网站框架模板,菜单是从XML读取

    &lt;?xml version="1.0" encoding="utf-8"?&gt; 控件列表导航菜单" id="" path="0" icon="../../images/tree/house.gif"&gt; 表格控件" id="1"&gt; 一般表格" id="11" href="webapp/grid/grid.htm"/&gt; 具有分页功能的表格" ...

    《精通CSS+DIV网页样式与布局》光盘源码

     1.2 使用CSS控制页面   1.3 体验CSS   第2章 CSS的基本语法   2.1 CSS选择器   2.2 选择器声明  2.3 CSS的继承  第3章 用CSS设置丰富的文字效果   3.1 CSS文字样式  3.2 文字实例一:模拟...

    Android开发菜单布局之表格布局示例

    本文实例讲述了Android开发菜单布局之表格布局。分享给大家供大家参考,具体如下: 多用于静态菜单页面 xml代码 代码内带详细解释 &lt;?xml version=1.0 encoding=utf-8?&gt; &lt;LinearLayout xmlns:android=...

    Spinner下拉菜单多选 MultiSelectionSpinner

    Spinner下拉菜单多选,在布局xml文件直接作为控件使用,在activity里面调用就行了

    CSS网站布局实录 基于Web标准的网站设计指南(第二版)-part1

    文本、图像、超链接、列表、菜单、网站导航、表单、数据表格、浮动布局等CSS布局控制。),智能、创造型布局思维(智慧、完美视觉艺术效果之CSS布局技巧、CSS Hack实践战略),Web技术团队倾情奉献(来自CSS布局与Web...

    精通CSS.DIV.网页样式与布局 源码

     1.2 使用CSS控制页面   1.3 体验CSS   第2章 CSS的基本语法   2.1 CSS选择器   2.2 选择器声明  2.3 CSS的继承  第3章 用CSS设置丰富的文字效果   3.1 CSS文字样式  3.2 文字实例一...

    Android 实例讲解 Spinner样式修改

    对于适配器加载自定义的xml布局文件,修改该Spinner样式较简单,就是在定义的xml布局文件中修改显示的样式就可以。但对于加载android自带的xml布局文件,有时会出现不是项目所需要的效果。主要问题有下拉几个: 1....

    CSS网站布局实录 (第二版)PDF版

    文本、图像、超链接、列表、菜单、网站导航、表单、数据表格、浮动布局等CSS布局控制。),智能、创造型布局思维(智慧、完美视觉艺术效果之CSS布局技巧、CSS Hack实践战略),Web技术团队倾情奉献(来自CSS布局与Web标准...

    自动生成VBA窗体菜单

    自动生成VBA窗体菜单 '*************************** '* 菜单类 * '*************************** Option Explicit Private WithEvents MenuBar_MenuItem As MSForms.Label '菜单项 Private WithEvents WorkForm As...

    精通CSS+DIV网页样式与布局视频教材

    1.2 使用CSS控制页面 1.2.1 行内样式 1.2.2 内嵌式 1.2.3 链接式 1.2.4 导入样式 1.2.5 各种方式的优先级问题 1.3 体验CSS 1.3.1 从零开始 1.3.2 加入CSS控制 1.3.3 控制图片 1.3.4 ...

    [精通CSS.DIV.网页样式与布局].(前沿科技).扫描版

    本书系统地讲解了CSS层迭样式表的基础理论和实际运用技术,通过大量实例对CSS进行深入浅出的分析,主要包括CSS的基本语法和概念,设置文字、图片、背景、表格、表单和菜单等网页元素的方法,以及CSS滤镜的使用。...

Global site tag (gtag.js) - Google Analytics