Menu菜单的简介和简单用法

本文介绍了Android中的三种主要菜单类型:系统菜单(OptionsMenu),上下文菜单(ContextMenu)和弹出菜单(PopupMenu)。系统菜单位于右上角,通过设置Menu文件布局并在Activity中重写onCreateOptionsMenu()和onOptionsItemSelected()方法实现。上下文菜单需要重写onCreateContextMenu()和onContextItemSelected()。弹出菜单由TextView或按钮触发,通过设置OnMenuItemClickListener显示。此外,还提到了自定义菜单(MyMenu)的使用。

三大菜单
1.系统菜单
2.上下文菜单
3.弹出菜单

 系统菜单(OptionsMenu)
 上下文菜单(ContextMenu)
 弹出菜单(Popupmenu)
 自定义菜单(MyMenu)

系统菜单(OptionsMenu)

在这里插入图片描述
右上角红色标注的就是系统菜单点击就会进入你所设置的内容
在这里插入图片描述

流程步骤

首先需要在res文件下创建一个Menu文件布局

// Menu布局以下的代码
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    >
<item android:id="@+id/item1" android:title="菜单一" >
    <menu>
        <item  android:id="@+id/item2" android:title="菜单一的子菜单一" ></item>
        <item  android:id="@+id/item3" android:title="菜单一的子菜单二" ></item>

    </menu>
</item>
</menu>

Activity代码需要重写两个方法 onCreateOptionsMenu() 和 onOptionsItemSelected()


  @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.menu_layout,menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int itemId = item.getItemId();
        switch (itemId){
            case R.id.item1:
                Toast.makeText(this, "我是菜单一", Toast.LENGTH_SHORT).show();
                break;
            case R.id.item2:
                Toast.makeText(this, "我是菜单一的子菜单一", Toast.LENGTH_SHORT).show();

                break;
            case R.id.item3:
                Toast.makeText(this, "我是菜单一的子菜单二", Toast.LENGTH_SHORT).show();

                break;
        }
        return super.onOptionsItemSelected(item);
    }

上下文菜单(ContextMenu)

在这里插入图片描述

Activity代码需要重写两个方法 onCreateContextMenu() 和 onContextItemSelected()

// An highlighted block
 @Override
    public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        getMenuInflater().inflate(R.menu.menu_layout,menu);
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {
        int itemId = item.getItemId();

        switch (itemId){

            case R.id.item1:
                Toast.makeText(this, "我是菜单一", Toast.LENGTH_SHORT).show();
                break;
            case R.id.item2:
                Toast.makeText(this, "我是菜单一的子菜单一", Toast.LENGTH_SHORT).show();

                break;
            case R.id.item3:
                Toast.makeText(this, "我是菜单一的子菜单二", Toast.LENGTH_SHORT).show();

                break;
        }

        return super.onContextItemSelected(item);
    }

弹出菜单(PopupMenu)

在这里插入图片描述

需要给TextView或者按钮添加点击事件去触发弹出菜单

   textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                showpop();
            }
        });

Activity代码需要设置监听 opopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()) ;

// An highlighted block
public void showpop() {
        PopupMenu popupMenu = new PopupMenu(this,textView,Gravity.CENTER);
        popupMenu.inflate(R.menu.menu_layout);

        popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                int itemId = item.getItemId();

                switch (itemId){

                    case R.id.item1:
                        Toast.makeText(MainActivity.this, "我是菜单一", Toast.LENGTH_SHORT).show();
                        break;
                    case R.id.item2:
                        Toast.makeText(MainActivity.this, "我是菜单一的子菜单一", Toast.LENGTH_SHORT).show();

                        break;
                    case R.id.item3:
                        Toast.makeText(MainActivity.this, "我是菜单一的子菜单二", Toast.LENGTH_SHORT).show();

                        break;
                }

                return false;
            }
        });
        popupMenu.show();
    }

自定义菜单(MyMenu)

在这里插入图片描述
顶部的item3和item4为自定义Menu

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    //先找到menu布局下面的布局与menu
        getMenuInflater().inflate(R.menu.menu,menu);
        //给自定义item配对自定义布局
        MenuItem item = menu.findItem(R.id.item3);
        //通过item找到对应的控件
        item.setActionView(R.layout.activity_button1);
        ImageView img = item.getActionView().findViewById(R.id.menu3);
        final TextView tv = item.getActionView().findViewById(R.id.menutext);
        //给找到的控件添加信息
        img.setImageResource(R.drawable.like);
        tv.setText("20");

//给图片添加监听点一次图片textView增加一次模拟点赞
        img.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = tv.getText().toString();
                int a=Integer.parseInt(s);
                a++;
                tv.setText(a+"");
            }
        });
        MenuItem item1 = menu.findItem(R.id.item4);
        item1.setActionView(R.layout.activity_button1);
        ImageView img1 = item1.getActionView().findViewById(R.id.menu3);
        final TextView tv1 = item1.getActionView().findViewById(R.id.menutext);
        img1.setImageResource(R.drawable.vview);
        tv1.setText("20");

        img1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String s = tv1.getText().toString();
                int a=Integer.parseInt(s);
                a++;
                tv1.setText(a+"");
            }
        });


        return super.onCreateOptionsMenu(menu);
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值