Android学习之菜单的使用方法

 更新时间:2022年9月21日 08:25  点击:23 作者:明昕1024

本文实例为大家分享了Android学习之菜单使用的具体代码,供大家参考,具体内容如下

Android中菜单包含上下文菜单和选项菜单两种类型。

使用统一的菜单类来管理菜单:

Menu、MenuItem、SubMenu三个类。

1.Menu类:

一个Menu对象代表一个菜单,是整个菜单的基础。
Menu类的常用方法:添加一个菜单:add(int groupId, int itemId, int order, CharSequence title)

2.MenuItem类:

MenuItem代表一个菜单项;
MenuItem往往是通过Menu的add方法来获取的。

3.subMenu类:

subMenu继承自Menu,其代表一个子菜单。

Menu、MenuItem、SubMenu的使用:
Menu通过add方法,来添加菜单项MenuItem并返回;
Menu通过addSubMenu方法,来添加自菜单SubMenu并返回;
通过MenuItem的多个方法,来设定菜单项的状态;
SubMenu继承自Menu,用相同方法,添加MenuItem及SubMenu;
通过SubMenu的多个方法,设定SubMenu的状态。

1.ContextMenu(上下文菜单):

ContextMenu(上下文菜单)类似于PC中的右键弹出菜单,当一个视图注册了上下文菜单时,长按该视图对象将出现一个提供相关功能的浮动菜单。上下文菜单可以被注册到任何视图对象中,最常见的是用于列表视图ListView中,但上下文菜单不支持图标和快捷键。

使用步骤如下:

(1)在Activity中使用上下文菜单,复写onCreateContextMenu() 和 onContextItemSelected()方法;
(2)为视图控件View中注册上下文菜单,使用registerForContextMenu()方法;
(3)在onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)中添加菜单项menu.add();
(4)在onContextItemSelected()中通过设置菜单的id来实现菜单子项的监听。

ContextMenu在Activity中的回调函数:

onCreateContextMenu(ContextMenu menu,View v,ContextMenuInfo info)
//初始化,第一次调用菜单时执行,用于创建菜单项目
onContextItemSelected(MenuItem item)
//菜单项被选中后调用,用于处理菜单事件,根据传递的item参数,确定具体的菜单项,进行设计
onContextMenuClosed(Menu menu) //菜单被关闭时调用
``

2.OptionsMenu(选项菜单):

使用步骤如下:

(1)在Activity中复写onCreateOptionsMenu()和onOptionsItemSelected()方法;

(2)在onCreateOptionsMenu(Menu menu)中添加菜单选项,有两种方式:

a、调用menu.add()
b、从布局文件中添加,在res下新建menu文件夹,创建menu文件,填写相应的选项;

(2)为视图控件View中注册上下文菜单,使用registerForContextMenu()方法;

OptionsMenu选项菜单在Activity中的回调方法:

onCreateOptionsMenu(Menu menu) 
//初始化选项菜单,初次显示菜单时调用
public boolean onOptionsItemSeleted(MenuItem item)
//选项菜单中的某个选项被选中时,调用该方法
public void onOptionMenuClosed(Menu menu)
//当关闭菜单时调用该方法

☆☆☆Android Studio实现使用菜单的使用

1.打开Android Studio,新建工程后,在activity_main.xml中,编写代码。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.androidlesson.MainActivity"
    android:background="@android:color/holo_blue_dark">
    
    <TextView
        android:text="TextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true"
        android:id="@+id/textView"
        android:background="@android:color/holo_green_dark"
        android:textSize="36sp" />
        
    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:srcCompat="@mipmap/ic_launcher"
        android:id="@+id/imageView"
        android:background="@android:color/holo_purple"
        android:layout_below="@+id/textView"
        android:layout_alignParentStart="true"
        android:layout_marginTop="14dp" />
        
</RelativeLayout>

2.在MainActivity.java中,编写相关代码。

package com.example.menu;

import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    TextView tv;
    ImageView iv;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv= (TextView) findViewById(R.id.textView);
        iv= (ImageView) findViewById(R.id.imageView);
        registerForContextMenu(tv);
        registerForContextMenu(iv);
    }
    
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        if (v.getId()==tv.getId()) {
            //menu.add(0,0,0,"打开");
            menu.add(0, 0, 0, "大号字体");
            //menu.add(0,1,1,"保存");
            menu.add(0, 1, 1, "小号字体");
            //SubMenu sm1=menu.addSubMenu(0,2,2,"编辑");
            SubMenu sm1 = menu.addSubMenu(0, 2, 2, "颜色");
            //sm1.add(0,3,3,"复制");
            //sm1.add(0,4,4,"粘贴");
            sm1.add(0, 3, 3, "黑色");
            sm1.add(0, 4, 4, "红色");
        }else {
            menu.add(1,5,5,"图片信息");
            menu.add(1,6,6,"图片说明");
        }
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case 0:
                tv.setTextSize(32);
                break;
            case 1:
                tv.setTextSize(16);
                break;
            case 3:
                tv.setTextColor(Color.BLACK);
                break;
            case 4:
                tv.setTextColor(Color.RED);
                break;
            case 5:
                Toast.makeText(this,"png格式图片,分辨率64",Toast.LENGTH_LONG).show();
                break;
            case 6:
                Toast.makeText(this,"这是安卓机器人的图片",Toast.LENGTH_LONG).show();
        }
        return super.onContextItemSelected(item);
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        SubMenu sub1=menu.addSubMenu(0,0,0,"文件");
        SubMenu sub2=menu.addSubMenu(0,1,1,"编辑");
        sub1.add(0,2,2,"打开");
        sub1.add(0,3,3,"保存");
        sub1.add(0,4,4,"另存为");
        sub2.add(0,5,5,"复制");
        sub2.add(0,6,6,"粘贴");
        menu.add(0,7,7,"退出");
        return super.onCreateOptionsMenu(menu);
    }
    
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()){
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 7:
                finish();
        }
        return super.onOptionsItemSelected(item);
    }
}

运行结果:

这就是菜单的简单使用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持猪先飞。

原文出处:https://blog.csdn.net/weixin_43468667/article/details/961540

相关文章

  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • jQuery实现非常实用漂亮的select下拉菜单选择效果

    本文实例讲述了jQuery实现非常实用漂亮的select下拉菜单选择效果。分享给大家供大家参考,具体如下:先来看如下运行效果截图:在线演示地址如下:http://demo.jb51.net/js/2015/js-select-chose-style-menu-codes/具体代码如...2015-11-08
  • jQuery+PHP+MySQL二级联动下拉菜单实例讲解

    二级联动下拉菜单选择应用在在很多地方,比如说省市下拉联动,商品大小类下拉选择联动。本文将通过实例讲解使用jQuery+PHP+MySQL来实现大小分类二级下拉联动效果。 实现效果:当选择大类时,小类下拉框里的选项内容也随着改...2015-10-30
  • JS基于Mootools实现的个性菜单效果代码

    本文实例讲述了JS基于Mootools实现的个性菜单效果代码。分享给大家供大家参考,具体如下:这里演示基于Mootools做的带动画的垂直型菜单,是一个初学者写的,用来学习Mootools的使用有帮助,下载时请注意要将外部引用的mootools...2015-10-23
  • jQuery实现有动画淡出效果的二级折叠菜单代码

    本文实例讲述了jQuery实现有动画淡出效果的二级折叠菜单代码。分享给大家供大家参考,具体如下:这里介绍jQuery实现有动画淡出效果的二级折叠菜单代码,相当不错,因考虑功能的实现,所以没有怎么美化,不过这样也好,可以给大家更...2015-10-21
  • Android子控件超出父控件的范围显示出来方法

    下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
  • jQuery实现可关闭固定于底(顶)部的工具条菜单效果

    本文实例讲述了jQuery实现可关闭固定于底(顶)部的工具条菜单效果。分享给大家供大家参考,具体如下:这是一款可关闭始终在页面底部的工具条菜单,浮动在页面顶部的大家见的比较多了,本款从形式上来说与其它的没什么差别,只是浮...2015-11-08
  • Android实现简单用户注册案例

    这篇文章主要为大家详细介绍了Android实现简单用户注册案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-05-26
  • Android中使用SDcard进行文件的读取方法

    首先如果要在程序中使用sdcard进行存储,我们必须要在AndroidManifset.xml文件进行下面的权限设置: 在AndroidManifest.xml中加入访问SDCard的权限如下: <!--...2016-09-20
  • 用Intel HAXM给Android模拟器Emulator加速

    Android 模拟器 Emulator 速度真心不给力,, 现在我们来介绍使用 Intel HAXM 技术为 Android 模拟器加速,使模拟器运行度与真机比肩。 周末试玩了一下在Eclipse中使...2016-09-20
  • Android自定义WebView网络视频播放控件例子

    下面我们来看一篇关于Android自定义WebView网络视频播放控件开发例子,这个文章写得非常的不错下面给各位共享一下吧。 因为业务需要,以下代码均以Youtube网站在线视...2016-10-02
  • ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单

    首先是数据库的设计。分类表叫cate.我做的是分类数据的二级联动,数据需要的字段有:id,name(中文名),pid(父id). 父id的设置: 若数据没有上一级,则父id为0,若有上级,则父id为上一级的id。数据库有内容后,就可以开始写代码,进...2014-05-31
  • php创建无限级树型菜单

    写递归函数,可考虑缓存,定义一些静态变量来存上一次运行的结果,多程序运行效率很有帮助.。 大概步骤如下: step1:到数据库取数据,放到一个数组, step2:把数据转化为一个树型状的数组, step3:把这个树型状的数组转为html代码。...2015-11-08
  • JS实现不使用图片仿Windows右键菜单效果代码

    本文实例讲述了JS实现不使用图片仿Windows右键菜单效果代码。分享给大家供大家参考,具体如下:这里演示JS不使用图片仿Windows右键菜单效果,这款代码灵活使用了文鼎字,配合CSS和JS做出了这个和系统右键菜单很相似的东东。...2015-10-23
  • jQuery实现精美的多级下拉菜单特效

    这是一款精美的多级下拉菜单美化,可以完美替代“select”来实现下拉菜单的效果。而且支持多级菜单,有加载等待效果,有层级分类展示。复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "ht...2015-03-15
  • Android实现边录边播功能

    这篇文章主要为大家详细介绍了Android实现边录边播功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-11-03
  • Android设置TextView竖着显示实例

    TextView默认是横着显示了,今天我们一起来看看Android设置TextView竖着显示如何来实现吧,今天我们就一起来看看操作细节,具体的如下所示。 在开发Android程序的时候,...2016-10-02
  • Android开发之游戏引擎AndEngine资料简单介绍

    最近查看了一些关于开源Android游戏引擎的资料,觉得AndEngine功能强大,例子丰富,更新较快。由于初学,找资料化不少时间,现在将自己在网上收集的比较实用的资料网址贴在这里...2016-09-20
  • Android判断当前屏幕是全屏还是非全屏

    在安卓开发时我碰到一个问题就是需要实现全屏,但又需要我们来判断出用户是使用了全屏或非全屏了,下面我分别找了两段代码,大家可参考。 先来看一个android屏幕全屏实...2016-09-20
  • Android应用程序启动时出现白色背景问题

    Android应用程序启动时出现白色背景问题要如何来解决呢,我们下面就一起来看一篇关于启动时的一些小问题,具体的如下文介绍. Android应用程序开发过程中,为了使应用...2016-11-01