目录

Menu(菜单) 简介

OptionMenu( 选项菜单)

menu. add

menu. xml


Menu(菜单) 简介

Android 中的 Menu(菜单)主要有如下几种:

OptionMenu:选项菜单,android 中最常见的菜单,通过 Menu 键来调用

SubMenu:子菜单,android 中点击子菜单将弹出一个显示子菜单项的悬浮框, 子菜单不支持嵌套,即不能包括其他子菜单

ContextMenu:上下文菜单,通过长按某个视图组件后出现的菜单,该组件需注册上下文菜单

官方文档:menus

OptionMenu( 选项菜单)

1、使用 OptionMenu 步骤如下:

2)在 activity 中重写如下两个方法就好,它们都在 android.app.Activity 类中已经定义好了

public boolean onCreateOptionsMenu(Menu menu):调用 OptionMenu,在这里完成菜单初始化

public boolean onOptionsItemSelected(MenuItem item):菜单项被选中时触发,这里完成事件处理

3、当然除了上面这两个方法还可以重写以下三个方法:

public void onOptionsMenuClosed(Menu menu):菜单关闭会调用该方法

public boolean onPrepareOptionsMenu(Menu menu):选项菜单显示前会调用该方法, 可在这里进行菜单的调整(动态加载菜单列表)

public boolean onMenuOpened(int featureId, Menu menu):选项菜单打开以后会调用这个方法

menu. add

直接在 Java 代码中设置菜单。如下所示,效果是点击菜单项中的颜色之后 " Hello Wolrd "则变成相应的颜色。

实现上图效果代码如下,布局文件内容:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/color_text"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="Hello World!"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.support.constraint.ConstraintLayout>

MainActivity 代码如下:

import android.graphics.Color;
import android.os.Bundle;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.TextView;
import android.widget.Toast;
/*** 一个应用程序可以有1个或多个活动,而没有任何限制。* 每个为应用程序所定义的活动都需要在 AndroidManifest.xml 中声明,应用的主活动的意图过滤器标签中需要包含 MAIN 动作和 LAUNCHER 类别* 如果 MAIN 动作还是 LAUNCHER 类别没有在活动中声明,那么应用程序的图标将不会出现在主屏幕的应用列表中。*/
public class MainActivity extends AppCompatActivity {/*** 定义不同颜色的菜单项唯一标识:*/final private int RED = 110;final private int GREEN = 111;final private int BLUE = 112;final private int YELLOW = 113;final private int GRAY = 114;final private int CYAN = 115;final private int BLACK = 116;private TextView color_text;/*** 当活动第一次被创建时调用*/@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*** 从项目的 res/layout 中的XML文件加载 UI 组件* android.util.Log#d(java.lang.String, java.lang.String) 方法用于在 Logcat 窗口中打印日志*/setContentView(R.layout.activity_main);Log.d("Android Message:", "The onCreate() event");color_text = findViewById(R.id.color_text);}/*** 方法在 android.app.Activity 类中已经定义好了* 调用 OptionMenu,在这里完成菜单初始化** @param menu* @return*/@Overridepublic boolean onCreateOptionsMenu(Menu menu) {/*** add(int groupId, int itemId, int order, CharSequence title),为菜单添加选项* 1)groupId:菜单组 标识* 2)itemId:菜单项标识,当用户点击菜单的时候,需要根据这个标识来判断,点击的是谁* 3)order:菜单排序,数值越小越排在前* 4)title:菜单名称*/menu.add(1, RED, 4, "红色");menu.add(1, GREEN, 2, "绿色");menu.add(1, BLUE, 3, "蓝色");menu.add(1, YELLOW, 1, "黄色");menu.add(1, GRAY, 5, "灰色");menu.add(1, CYAN, 6, "蓝绿色");menu.add(1, BLACK, 7, "黑色");return true;}/*** 方法在 android.app.Activity 类中已经定义好了* 菜单项被选中时触发,这里完成事件处理** @param item* @return*/@Overridepublic boolean onOptionsItemSelected(MenuItem item) {/*** int getItemId():获取菜单项id标识* int getGroupId():获取菜单项所在组的id标识* int getOrder():获取菜单项的排序号*/int itemId = item.getItemId();System.out.println("click Item Id>>>" + itemId);/**根据不同的颜色,改变文本的颜色*/switch (itemId) {case RED:color_text.setTextColor(Color.RED);break;case GREEN:color_text.setTextColor(Color.GREEN);break;case BLUE:color_text.setTextColor(Color.BLUE);break;case YELLOW:color_text.setTextColor(Color.YELLOW);break;case GRAY:color_text.setTextColor(Color.GRAY);break;case CYAN:color_text.setTextColor(Color.CYAN);break;case BLACK:color_text.setTextColor(Color.BLACK);break;}return super.onOptionsItemSelected(item);}
}

menu. xml

另外还可以通过 XML 方式定义 Menu,举个简单的例子,如下所示为 菜单的 xml 文件

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"><itemandroid:id="@+id/menu_setting"android:title="设置" /><itemandroid:id="@+id/menu_help"android:title="帮助" />
</menu>

布局文件仍然和之前的一样,不同点在 Activity 中,如下所示:

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
/*** 一个应用程序可以有1个或多个活动,而没有任何限制。* 每个为应用程序所定义的活动都需要在 AndroidManifest.xml 中声明,应用的主活动的意图过滤器标签中需要包含 MAIN 动作和 LAUNCHER 类别* 如果 MAIN 动作还是 LAUNCHER 类别没有在活动中声明,那么应用程序的图标将不会出现在主屏幕的应用列表中。*/
public class MainActivity extends AppCompatActivity {/*** 当活动第一次被创建时调用*/@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);/*** 从项目的 res/layout 中的XML文件加载 UI 组件* android.util.Log#d(java.lang.String, java.lang.String) 方法用于在 Logcat 窗口中打印日志*/setContentView(R.layout.activity_main);Log.d("Android Message:", "The onCreate() event");}/*** 方法在 android.app.Activity 类中已经定义好了* 调用 OptionMenu,在这里完成菜单初始化** @param menu* @return*/@Overridepublic boolean onCreateOptionsMenu(Menu menu) {/*** 不再使用 Menu.add 的方法,而是从 xml 中加载* android.support.v7.app.AppCompatActivity#getMenuInflater()*/MenuInflater menuInflater = getMenuInflater();menuInflater.inflate(R.menu.setting_menu, menu);return super.onCreateOptionsMenu(menu);}/*** 方法在 android.app.Activity 类中已经定义好了* 菜单项被选中时触发,这里完成事件处理** @param item* @return*/@Overridepublic boolean onOptionsItemSelected(MenuItem item) {/*** int getItemId():获取菜单项id标识,此时是随机生成的* int getGroupId():获取菜单项所在组的id标识* int getOrder():获取菜单项的排序号* CharSequence getTitle():获取菜单的名称*/int itemId = item.getItemId();CharSequence menuTitle = item.getTitle();System.out.println("\r\nclick Item Id>>>" + itemId);System.out.println("\r\nclick Item Id>>>" + menuTitle);return super.onOptionsItemSelected(item);}
}

控制台输出:

I/ViewRootImpl: CPU Rendering VSync enable = true
I/System.out: click Item Id>>>2131165259
              click Item Id>>>设置
I/ViewRootImpl: CPU Rendering VSync enable = true
I/System.out: click Item Id>>>2131165258
I/System.out: click Item Id>>>帮助
I/ViewRootImpl: CPU Rendering VSync enable = true
I/System.out: click Item Id>>>2131165259
              click Item Id>>>设置

Android 控件 之 菜单(Menu)相关推荐

  1. android选项菜单源代码,Android应用程序----UI界面控件(菜单menu)

    菜单是应用程序中非常重要的组成部分,能够在不占用界面空间的前提下,为应用程序提供了统一的功能和设置界面,并为程序开发人员提供了易于使用的编程接口 Android系统支持三种菜单 选项菜单(Option ...

  2. Android 控件 之 Menu 菜单

    http://www.cnblogs.com/Mrs-cc/archive/2012/07/21/2603042.html 1.OptionsMenu (选项菜单)用法总结 使用方法: 方法一:添加菜 ...

  3. ASP.NET Menu控件子菜单弹出导致页面出现滚动条问题

    ASP.NET Menu控件子菜单弹出的时候导致页面CSS属性的Min-Height产生变化,结果是原来全屏的画面,多出了纵滚动条.可以通过如下方法解决: 将ASP.NET控件放置到Table的单元格 ...

  4. Android控件点击圆形阴影反馈解决方案

    Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...

  5. 【079】用代码来创建 Android 控件

    一般来说我们在创建控件的时候都是在 XML 文件中完成的, 实施起来还是蛮方便的, 而且修改起来也可以很快的看见效果, 但是有一个很大的劣势就是没办法动态的创建控件, 举个例子, 例如我从数据库中取出 ...

  6. Android 控件架构及View、ViewGroup的测量

    附录:示例代码地址 控件在Android开发的过程中是必不可少的,无论是我们在使用系统控件还是自定义的控件.下面我们将讲解一下Android的控件架构,以及如何实现自定义控件. 1.Android控件 ...

  7. Android控件美化Shape

    Android控件美化Shape你会用吗?   -- 未审核 编辑文档  如果你对Android系统自带的UI控件感觉不够满意,可以尝试下自定义控件,我们就以Button为例,很早以前Android1 ...

  8. android控件属性

    android控件属性 控件属性: android属性 Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料, 第一类:属性值为true或false an ...

  9. Android控件系列之RadioButtonRadioGroup

    2019独角兽企业重金招聘Python工程师标准>>> 学习目的: 1.掌握在Android中如何建立RadioGroup和RadioButton 2.掌握RadioGroup的常用 ...

  10. 最简单也最难——如何获取到Android控件的高度,获取android控件

    最简单也最难--如何获取到Android控件的高度,获取android控件 问题 如何获取一个控件的长和高,相信很多朋友第一眼看见这个问题都会觉得很简单,直接在onCreate里面调用getWidth ...

最新文章

  1. webdriver --API--(java版) the second part
  2. LINQ 的标准查询操作符
  3. 2020年快手短视频直播电商营销增长宝典
  4. 如何仅对文档项目在ECB中应用自定义操作
  5. quartz java 实现_Quartz使用-入门使用(java定时任务实现)
  6. Flutter 高级篇-所有知识点架构
  7. c语言单链表原地转置,不带头结点的单链表的插入,删除,原地转置,判断空,清空,统计节点数目等操作...
  8. eff java_eff java 39条
  9. Oracle 批量修改字段长度
  10. 数据挖掘06-基于标准差和箱体图的单指标异常点检测【原理、数据及代码】
  11. 移动,电信,中行软开,微软,百度等企业工作纯技术性分析
  12. java设置拨号界面_JS+CSS实现仿触屏手机拨号盘界面及功能模拟完整实例
  13. csm和uefi_[整理]BIOS设置UEFI和安全引导
  14. C++环境下部署深度学习模型方案
  15. mysql inet aton ipv6_Linux网络编程IPv4和IPv6的inet_addr、inet_aton、inet_pton等函数小结
  16. DeepSORT C++版的一个bug
  17. 两化融合的定义和两化融合如何认定
  18. vue使用xe-utils通用函数库
  19. foxmail中导入网易邮箱联系人方法
  20. end=强制打印成一行;\t拉大列间距_xing2516_新浪博客

热门文章

  1. 偶师傅说过的很有意思的话
  2. python中创建类的作用_Python中类的创建与使用详解
  3. 拓端tecdat|R语言做复杂金融产品的几何布朗运动的模拟
  4. AndroidStudio使用XmlPullParser解析xml文件
  5. 解决 Manjaro 中 Linuxqq扫码登陆闪退问题
  6. 微信小程序教程笔记3
  7. clion opencv安装_Mac 下搭建 Clion + OpenCV4.x 的开发环境
  8. 【笔记+总结】Andrew Ng-神经网络和深度学习
  9. java+编辑距离自动机_编辑距离,重叠,组装算法和python程序.pptx
  10. 【Django 2021年最新版教程28】前端模板中 时间日期星期格式化