安卓开发-使用XML菜单布局简单介绍

使用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添加菜单项

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

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

(三)响应菜单

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

@Overridepublicboolean onOptionsItemSelected(MenuItem item) {    switch(item.getItemId()) {    case R.id.mi1:        // do sthbreak;    case R.id.mi2:        // do sthbreak;    case R.id.mi3:        // do sthbreak;    case R.id.mi4:        // do sthbreak;    }    return true;}

这一步最大的体现了使用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"/>

安卓开发-使用XML菜单布局简单介绍

时间: 2024-11-07 04:28:49

安卓开发-使用XML菜单布局简单介绍的相关文章

iOS开发—音频的播放的简单介绍和封装工具类

iOS开发—音频的播放的简单介绍和封装工具类 一.音效的播放简单介绍 简单来说,音频可以分为2种 (1)音效 又称“短音频”,通常在程序中的播放时长为1~2秒 在应用程序中起到点缀效果,提升整体用户体验 (2)音乐 比如游戏中的“背景音乐”,一般播放时间较长 框架:播放音频需要用到AVFoundation.framework框架 二.音效的播放 1.获得音效文件的路径 NSURL *url = [[NSBundle mainBundle] URLForResource:@"m_03.wav&qu

qt-qml移动开发之在ios上开发和部署app流程简单介绍

qt5.3已经全面支持移动开发,除了mac,windows,linux.还支持ios,android,wp,meego等移动平台,本教程是作者依据自己的经验,从头讲怎么样在ios上公布自己的app.因为眼下国内相关文章还比較少,可能文章里有所疏漏,或者并不是最优方法. 软件准备:qt5.3 , xcode 5.1.1 编译环境: Mac os Qt5.3下载地址http://qt-project.org选择相应的Mac ox版本号,支持iOS和android的版本号.安装过程省略 Xcode在a

关于安卓开发实现侧滑菜单效果

学习出处:http://blog.csdn.net/guolin_blog/article/details/8714621 这里不转载内容了,按照自己理解写一篇 侧滑菜单效果 就是手机版QQ的左侧向右滑动出现菜单栏的那一种效果 实现原理.在一个Activity的布局中需要有两部分,一个是菜单(menu)的布局,一个是内容(content)的布局.两个布局横向排列,菜单布局在左,内容布局在右.初始化的时候将菜单布局向左偏移,以至于能够完全隐藏,这样内容布局就会完全显示在Activity中.然后通过

iOS开发基础-UITableView控件简单介绍

 UITableView 继承自 UIScrollView ,用于实现表格数据展示,支持垂直滚动.  UITableView 需要一个数据源来显示数据,并向数据源查询一共有多少行数据以及每一行显示什么内容等.凡是遵守 UITableViewDataSource 协议的Objc对象,都可以是 UITableView 的数据源.  - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView  返回共有多少组数据.  - (NSI

iOS开发多线程篇 09 —NSOperation简单介绍

iOS开发多线程篇—NSOperation简单介绍 一.NSOperation简介 1.简单说明 NSOperation的作?:配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOperationQueue实现多线程的具体步骤: (1)先将需要执行的操作封装到一个NSOperation对象中 (2)然后将NSOperation对象添加到NSOperationQueue中 (3)系统会?动将NSOperationQueue中的NSOpe

iOS开发——实用技术OC篇&amp;?Invocation简单介绍

Invocation简单介绍 方法一:运行时方法:(这里在之前的文章定时器的几种方法中说过:www.cnblogs.com/iCocos/p/4694581.html) 1:创建一个签名: NSMethodSignature *singature = [NSMethodSignature signatureWithObjCTypes:"[email protected]:"]; 这里我想如果你仔细的话肯定注意到了:后面的“[email protected]:”,这里是运行时的语法在这里

Android开发布局简单介绍

Android开发布局介绍 1.线性布局 LinearLayout 布局中的组件会一个挨着一个排列起来,android:orientation属性可以控制排列方向,horizontal-水平.vertical-垂直 线性布局不会自动换行,当超出屏幕范围时,剩下的组件不会显示出来. 2.表格布局 TableLayout 继承自LinearLayout,其本质依然是LinearLayout.通过TableRow来管理表格的行数和列数.添加一个TableRow就是一行. 3.帧布局 FrameLayo

LinearLayout布局简单介绍

LinearLayout android中常用的线性布局 可以根据屏幕的大小自动调节控件 下面对LinearLayout的几个属性做简单的介绍 1.android:orientation属性: 即排列方式,可以选择横排或竖排(horizontal,vertical) vertical:垂直排列 horizontal:水平排列 举个例子: 比如我们要在一个界面中做一个3x3 即3行3列的按钮 那么在主LinearLayout中我们通常用垂直布局即(android:orientation="vert

安卓开发中的线性布局及重要属性

线性布局是安卓默认的布局方式 ,分为垂直线性布局和水平线性布局,分别表示为android:orientataion=”vertical”和android:orientation=”horizontal”.前者表示控件一垂直方式排列,即每行放一个控件:即所有控件都放在同一行,超出部分会被遮住 ?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://sche