Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 304|回复: 0

[默认分类] Android中Menu的基本用法

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-5-30 11:21:10 | 显示全部楼层 |阅读模式


    一、 使用xml定义Menu
    菜单资源文件必须放在res/menu目录中。菜单资源文件必须使用<menu>标签作为根节点。除了<menu>标签外,还有另外两个标签用于设置菜单项和分组,这两个标签是<item>和<group>。
    <menu>标签没有任何属性,但可以嵌套在<item>标签中,表示子菜单的形式。不过<item>标签中不能再嵌入<item>标签。
    1.<item>标签的属性含义如下:
    Id:表示菜单项的资源ID
    menuCategory:同种菜单项的种类。该属性可取4个值:container、system、secondary和alternative。通过menuCategroy属性可以控制菜单项的位置。例如将属性设为system,表示该菜单项是系统菜单,应放在其他种类菜单项的后面。
    orderInCategor:同种类菜单的排列顺序。该属性需要设置一个整数值。例如menuCategory属性值都为system的3个菜单项(item1、item2和item3)。将这3个菜单项的orderInCategory属性值设为3、2、1,那么item3会显示在最前面,而item1会显示在最后面。
    title:菜单项标题(菜单项显示的文本)
    titleCondensed:菜单项的短标题。当菜单项标题太长时会显示该属性值
    icon:菜单项图标资源ID
    alphabeticShortcut:菜单项的字母快捷键
    numericShortcut:菜单项的数字快捷键
    checkable:表示菜单项是否带复选框。该属性可设计为true或false
    checked:如果菜单项带复选框(checkable属性为true),该属性表示复选框默认状态是否被选中。可设置的值为true或false
    visible:菜单项默认状态是否可视
    enable:菜单项默认状态是否被激活
    2.<group>标签的属性含义如下:
    id:表示菜单组的ID
    menuCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组
    orderInCategory:与<item>标签的同名属性含义相同。只是作用域为菜单组
    checkableBehavior:设置该组所有菜单项上显示的选择组件(CheckBox或Radio Button)。如果将该属性值设为all,显示CheckBox组件;如果设为single,显示Radio Button组件;如果设为none,显示正常的菜单项(不显示任何选择组件)。要注意的是,Android SDK官方文档在解释该属性时有一个笔误,原文是:
    Whether the items are checkable. Valid values: none, all(exclusive/radiobuttons), single(non-exclusive/checkboxes).
    相反了,正确应该是
    all(non-exclusive/checkboxes),single(exclusive/radiobuttons).
    visible:表示当前组中所有菜单项是否显示。该属性可设置的值是true或false
    enable:表示当前组中所有菜单项是否被激活。该属性可设置的值是true或false
    3.具体使用
    在代码中使用
    public boolenonCreateOptionsMenu(Menu menu){
    MenuInflatemenuInflate = getMenuInflate();
    menuInflate.inflate(R.menu.option_menu,menu);
    returntrue;
    }
    二、使用代码定义Menu
    public boolean onCreateOptionsMenu(Menu menu){   
    // 方法一,用代码构建   
      menu.add(Menu.NONE, Menu.NONE, 1, "菜单1");   
      menu.add(Menu.NONE, Menu.NONE, 2, "菜单2");   
      menu.add(Menu.NONE, Menu.NONE, 3, "菜单3");   
      menu.add(Menu.NONE, Menu.NONE, 4, "菜单4");   
    menu.add(Menu.NONE, Menu.NONE, 5, "菜单5");   
    menu.add(Menu.NONE, Menu.NONE, 6, "菜单6");   
    return true;   
    }   
    三、菜单响应
    重写onOptionsItemSelected(MenuItem item)这个方法就可以做响应的操作了。
    四、实例

    res/menu下的activity_main.xml文件
      
    1. <menu xmlns:android="http://schemas.android.com/apk/res/android" >
    2.     <item
    3.         android:id="@+id/menu_settings"
    4.         android:orderInCategory="1"
    5.         android:icon="@drawable/home"
    6.         android:title="@string/menu_settings"/>
    7.     <item
    8.         android:id="@+id/menu_about"
    9.         android:orderInCategory="2"
    10.         android:icon="@drawable/mine"
    11.         android:title="@string/menu_about"/>
    12.     <item
    13.         android:id="@+id/menu_quit"
    14.         android:orderInCategory="3"
    15.         android:icon="@drawable/more"
    16.         android:title="@string/menu_quit"/>
    17.    
    18. </menu>
    复制代码

    MainActivity.java文件


      
    1. package com.example.menutest;
    2. import android.os.Bundle;
    3. import android.app.Activity;
    4. import android.view.Menu;
    5. import android.view.MenuItem;
    6. import android.widget.Toast;
    7. public class MainActivity extends Activity {
    8.         @Override
    9.         protected void onCreate(Bundle savedInstanceState) {
    10.                 super.onCreate(savedInstanceState);
    11.                 setContentView(R.layout.activity_main);
    12.         }
    13.         @Override
    14.         public boolean onCreateOptionsMenu(Menu menu) {
    15.                 // Inflate the menu; this adds items to the action bar if it is present.
    16.                 getMenuInflater().inflate(R.menu.activity_main, menu);
    17.                 return true;
    18.         }
    19.         @Override
    20.         public boolean onOptionsItemSelected(MenuItem item) {
    21.                 // TODO Auto-generated method stub
    22.                 switch(item.getItemId()){
    23.                case R.id.menu_about:               
    24.                    Toast.makeText(MainActivity.this, ""+"关于", Toast.LENGTH_SHORT).show();
    25.                    break;
    26.                case R.id.menu_settings:
    27.                    
    28.                    Toast.makeText(MainActivity.this, ""+"设置", Toast.LENGTH_SHORT).show();
    29.                    break;
    30.                case R.id.menu_quit:
    31.                    
    32.                    Toast.makeText(MainActivity.this, ""+"退出", Toast.LENGTH_SHORT).show();
    33.                    break;
    34.                default:
    35.                        break;
    36.                }
    37. //               Toast.makeText(MainActivity.this, ""+item.getItemId(), Toast.LENGTH_SHORT).show();
    38.        
    39.                 return super.onOptionsItemSelected(item);
    40.         }
    41. }
    复制代码

    运行结果:

    附:自定义菜单的背景参见:
    http://blog.csdn.net/sodino/article/details/6165132
      


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-5-9 00:16 , Processed in 0.347400 second(s), 38 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表