Android学习之菜单的使用方法

手机APP/开发
367
0
0
2023-02-25
标签   Android

本文实例为大家分享了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);
    }
}

运行结果:

这就是菜单的简单使用。