安卓讲课笔记5.11 菜单

news2025/1/20 1:52:29

文章目录

  • 零、本讲学习目标
  • 一、导入新课
  • 二、新课讲解
    • (一)菜单概述
      • 1、选项菜单
      • 2、上下文菜单
      • 3、子菜单
    • (二)选项菜单案例演示
      • 1、创建安卓应用
      • 2、准备图片素材
      • 3、字符串资源文件
      • 4 、主布局资源文件
      • 5、主界面类实现功能
      • 6、启动应用,查看效果
      • 更新到此
    • (三)上下文菜单案例演示
    • (四)子菜单案例演示
    • (五)利用菜单配置文件生成菜单
  • 三、归纳总结
  • 四、上机操作

零、本讲学习目标

  1. 知道三种菜单使用场景
  2. 能够正确使用三种菜单

一、导入新课

  • 菜单在安卓应用程序中占有比较重要的位置。原生安卓提供了三种类型的菜单:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。有兴趣的同学可以玩一玩Navigation Drawer(导航抽屉),类似于滑动菜单。
    在这里插入图片描述

二、新课讲解

(一)菜单概述

  • 菜单在安卓应用程序中占有比较重要的位置。原生安卓提供了三种类型的菜单:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)和子菜单(SubMenu)。在实际安卓项目中,往往会使用SlidingMenu(滑动菜单),但是要求我们学习如何使用第三方开源库。

1、选项菜单

  • 创建选项菜单
@Override                                               
public boolean onCreateOptionsMenu(Menu menu) {         
    return super.onCreateOptionsMenu(menu);             
}                                                       

2、上下文菜单

  • 给控件注册上下文菜单
registerForContextMenu(tvWelcome);

3、子菜单

  • 添加子菜单
menu.addSubMenu(1, 1, 1, "设置红色");

(二)选项菜单案例演示

1、创建安卓应用

  • 基于Empty Activity模板创建安卓应用 - OptionsMenuDemo
    在这里插入图片描述
  • 单击【Finish】按钮
    在这里插入图片描述

2、准备图片素材

  • 将背景图片拷贝到drawable目录
    在这里插入图片描述

3、字符串资源文件

  • 字符串资源文件 - strings.xml
    在这里插入图片描述
<resources>
    <string name="app_name">选项菜单演示</string>
    <string name="popup_options_menu">弹出选项菜单</string>
</resources>

4 、主布局资源文件

  • 主布局资源文件 - activity_main.xml
    在这里插入图片描述
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/background"
    tools:context=".MainActivity">

</LinearLayout>

5、主界面类实现功能

  • 主界面类 - MainActivity
    在这里插入图片描述

  • 声明菜单标识常量
    在这里插入图片描述

  • 创建选项菜单
    在这里插入图片描述

  • 创建菜单项选择事件方法
    在这里插入图片描述

  • 查看完整代码

package net.hw.optionsmenu;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Toast;
import android.widget.Toolbar;

public class MainActivity extends AppCompatActivity {

    private static final int NEW_FILE_MENU = 1; // 新建文件菜单标识
    private static final int OPEN_FILE_MENU = 2; // 打开文件菜单标识
    private static final int SAVE_FILE_MENU = 3; // 保存文件菜单标识
    private static final int EXIT_APP_MENU = 4;  // 退出应用菜单标识

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /**
     * 创建选项菜单
     *
     * @param menu
     * @return 是否成功
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // 添加四个菜单项(组标识、菜单项标识、菜单项序号、菜单项标题)
        menu.add(1, NEW_FILE_MENU, 1, "新建文件");
        menu.add(1, OPEN_FILE_MENU, 2, "打开文件");
        menu.add(1, SAVE_FILE_MENU, 3, "保存文件");
        menu.add(1, EXIT_APP_MENU, 4, "退出应用");
        return true;
    }

    /**
     * 菜单项选择事件处理方法
     *
     * @param item
     * @return 是否成功
     */
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        // 根据菜单项标识判断用户单击了哪个菜单项
        switch (item.getItemId()) {
            case NEW_FILE_MENU: // 新建文件菜单项
                Toast.makeText(this, "你单击了【新建文件】菜单项~", Toast.LENGTH_SHORT).show();
                break;
            case OPEN_FILE_MENU: // 打开文件菜单项
                Toast.makeText(this, "你单击了【打开文件】菜单项~", Toast.LENGTH_SHORT).show();
                break;
            case SAVE_FILE_MENU: // 保存文件菜单项
                Toast.makeText(this, "你单击了【保存文件】菜单项~", Toast.LENGTH_SHORT).show();
                break;
            case EXIT_APP_MENU: // 退出应用菜单项
                finish(); // 关闭当前窗口
                break;
        }
        return true;
    }    
}

6、启动应用,查看效果

  • 单击活动栏右边的三点按钮,弹出选项菜单
    在这里插入图片描述

更新到此

(三)上下文菜单案例演示

1、创建安卓应用【ContextMenuDemo】
2、将图片素材拷贝到drawable目录
3、主布局资源文件acitivity_main.xml
4、字符串资源文件strings.xml
5、主界面类 - MainActivity
6、启动应用,查看效果

(四)子菜单案例演示

1、创建安卓应用【SubMenuDemo】
2、将背景图片拷贝到drawable目录
3、主布局资源文件activity_main.xml
4、字符串资源文件strings.xml
5、主界面类 - MainActivity
6、启动应用,查看效果

(五)利用菜单配置文件生成菜单

1、常见安卓应用【XMLMenu】
2、将图片素材拷贝到drawable目录
3、主布局资源文件activity_main.xml
4、菜单配置文件main.xml
5、字符串资源文件strings.xml
6、主界面类 - MainActivity
7、启动应用,查看效果
8、文件和编辑不一直出现在活动栏

三、归纳总结

  • 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。

四、上机操作

  • 形式:单独完成
  • 题目:仿照微信生成类似的菜单
  • 要求:单击加号按钮,弹出选项菜单
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/44106.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2. Vue3 Composition API

Composition API 1.Composition API 接下来我们来介绍一下Vue3中新增的Composition API如何使用。注意Composition API仅仅是Vue3中新增的API&#xff0c;我们依然可以使用Options API。先来实现一下之前演示的获取鼠标位置的案例。做这个案例之前&#xff0c;需要先介绍一下…

MybatisPlus简单使用与自定义sql以及通过自定义sql实现多表联查的分页查询

MybatisPlus简单使用与自定义sql以及通过自定义sql实现多表联查的分页查询前言1. mybatis的简单使用2. MybatisPlus 的简单使用2.1 入门2.1.1 简单配置2.1.2 入门例子2.1.3 测试2.2 MybatisPlus自带封装的增删改查2.2.1 傻瓜式使用2.2.2 批量添加数据3 MybatisPlus 动态查询sql…

计算机网络---数据链路层扩展的以太网

&#xff08;一&#xff09;在物理层扩展以太网 使用光纤扩展&#xff1a;主机使用光纤和一对光纤调制解调器连接到集线器 使用集线器扩展&#xff1a;主机使用光纤和一对光纤调制解调器连接到集线器 使用集线器扩展的优缺点 优点 &#xff1a;使原来属于不同碰撞域&#xff0…

Nodejs -- Express中间件的概念及基本使用

文章目录1 中间件的概念1.1 什么是中间件1.2 现实生活中的例子1.3 Express中间件的调用流程1.4 Express的中间件的格式1.5 next函数的作用2 Express中间件初体验2.1 定义中间件函数2.2 全局生效的中间件2.3 定义全局中间件的简化形式2.4 中间件的作用2.5 定义多个全局中间件2.6…

机器学习-(手推)线性回归3-正则化-岭回归(Ridge)-频率角度贝叶斯角度

一、正则化-岭回归-频率角度 回顾&#xff1a; Loss Function&#xff1a; 过拟合的解决方法&#xff1a; ①最直接&#xff1a;加数据 ②降维&#xff08;特征选择/特征提取&#xff08;PCA&#xff09;&#xff09; ③正则化&#xff08;对参数空间&#xff0c;例如w的约…

预处理,编译,汇编,链接,全过程。

编译&#xff0c;链接&#xff0c;全过程。背景知识预处理&#xff1a;1.宏定义指令&#xff0c;如#define MAX 1&#xff1b;2.条件编译指令&#xff0c;如#ifdef、 #ifndef、#else、#elif、#endif等。3.头文件包含指令&#xff0c;如#include等。4.特殊符号&#xff0c;预编译…

SQL explain解析器

EXPLAIN 参数前言字段参数id 查询编号select_type 关联类型SIMPLEPRIMARYUNION & UNION RESULTDERIVEDSUBQUERYDEPENDENTUNCACHEABLEMATERIALIZEDtable 表名partitions 数据的分区信息type 关联类型system & consteq_refreffulltextref_or_nullindex_mergeunique_subqu…

必备表格软件-FineReport正则表达式简介

1. 概述 1.1 应用场景 有时候我们需要用到正则表达式进行信息的校验。 例如有一张使用了「文本控件」的查询报表&#xff0c;输入「销售员」姓名后可查询销售员的销售情况&#xff0c;此时希望设置销售员文本控件的填入信息校验内容为&#xff1a;若填入内容不是中文或中文的…

【无标题】接口测试用例设计(精华)

接口测试 请求头 请求头中的Content-Type有哪几种&#xff1a; 1.application/x-www-form-urlencoded 最常见的 POST 提交数据的方式&#xff0c;原生Form表单&#xff0c;如果不设置 enctype 属性&#xff0c;默认为application/x-www-form-urlencoded 方式提交数据。 2.appli…

Node.js 入门教程 19 package-lock.json 文件

Node.js 入门教程 Node.js官方入门教程 Node.js中文网 本文仅用于学习记录&#xff0c;不存在任何商业用途&#xff0c;如侵删 文章目录Node.js 入门教程19 package-lock.json 文件19.1 示例19 package-lock.json 文件 在版本 5 中&#xff0c;npm 引入了 package-lock.json 文…

BUUCTF Reverse/[2019红帽杯]xx

BUUCTF Reverse/[2019红帽杯]xx 先看下文件信息&#xff1a;没有加壳、64位程序 看别人wp时候发现个好东东,就是这个findcrypt插件&#xff0c;可以看加密算法的&#xff0c;具体安装可以看这个IDA7.5安装findcrypt3插件 可以看到这是tea加密 先一点点分析代码&#xff0c;输入…

48.标准输入输出流

标准输入流对象cin&#xff0c;重点掌握的函数&#xff1a; 1.cin.get() //一次只能读取一个字符 2.cin.get(一个参数) //读一个字符 3.cin.get(两个参数) //可以读字符串 这种情况下不会读取换行符&#xff0c;换行符始终留在缓冲区当中 4.cin.getline() 此函数在读取数据的…

跳出打工圈!程序员要如何走上创业逆袭路,获得财富自由

前言 采访了一位创业人物&#xff0c;创业即是人生&#xff0c;生命精彩待续 人生的每一种经历都是一门功课&#xff0c;我们无法跳跃过去&#xff0c;所以必须要逐个地去完成它。无论遇到什么样的困难&#xff0c;自己想通了、走出来了&#xff0c;才会有不一样的自己。 大…

rt-thread通过spi连接W25Q32后无法读取ID

注意&#xff0c;cs引脚必须由rtt控制&#xff0c;但是我这个cs引脚用的是PA15&#xff0c;它默认是jlink的引脚&#xff0c;所以首先要将jlink禁用&#xff0c;如下&#xff1a; rcu_periph_clock_enable(RCU_AF);rcu_periph_clock_enable(RCU_GPIOA);rcu_periph_clock_enable…

开课通知 | 《AISHELL-3语音合成实战》课程

语音合成技术 在多个智能语音技术的学习方向中&#xff0c;语音合成又称文本转换&#xff08;Text To Speech, 简称TTS&#xff09;即将文字信息转换成为人类可以听得懂、流利的语音技术。在人机语音交互系统中&#xff0c;语音合成作为最后机器将内容转化为语音的输出环节&…

线程可重复使用,程序开发是如何使用线程池的呢?

大家都知道多线程开发对于程序开发的重要性&#xff0c;今天大连九哥来给大家聊一聊线程池的使用过程。 一、为什么要使用线程池&#xff1f; 大家都知道java支持多线程开发&#xff0c;也就是支持多个任务并行运行&#xff0c;我们也知道线程的生命周期中包括创建、就绪、运…

maltose-Transferrin 麦芽糖-转铁蛋白

maltose-Transferrin 麦芽糖-转铁蛋白 中文名称&#xff1a;麦芽糖-转铁蛋白 英文名称&#xff1a;maltose-Transferrin 别称&#xff1a;转铁蛋白修饰麦芽糖&#xff0c;Tf-麦芽糖 可以提供PEG接枝修饰麦芽糖&#xff0c;麦芽糖-聚乙二醇-转铁蛋白,Transferrin-PEG-maltos…

17.Http__Linux

目录 1.为什么要学Linux 2.我们要学什么 3.Linux命令操作 1.常用快捷键&#xff1a; 2.文件的操作 4.管道pipe 5.重定向redirect 5.查看系统指标&#xff08;任务管理器&#xff09; 7.安装软件(maven、包) 8.部署博客系统 1.首先对tomcat进行安装和调配 HTTPS:出现…

山西青年杂志山西青年杂志社山西青年编辑部2022年第22期目录

本刊专稿《山西青年》投稿&#xff1a;cn7kantougao163.com 基于学生激励机制的考核方案研究 聂晶晶; 1-4 当前我国大学生网络心理障碍分析及引导机制研究 陈宁;王佳玮; 5-8 教育教学研究 百万扩招背景下高职院校“三教”改革探究 郭庆秋; 9-11 “百万扩招”背…

linux统计目录文件数量

1、当前文件夹及子文件夹的数量&#xff1a; ls -lR | grep "^d" | wc -l 2、当前文件及子目录文件夹的数量&#xff1a; ls -lR | grep "^-" | wc -l 3、当前目录某文件的数量&#xff1a; find . -name filename | wc -l 4、当前目录所有目录和文件罗…