本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Android入门之Menu组件的使用教程详解
zhuxiaoqiang · 160浏览 · 发布于2022-11-25 +关注

这篇文章主要为大家详细介绍了Android中常用的几个Menu组件的使用教程,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下

简介

Android有不同的菜单:

  • 系统菜单

  • 弹出菜单(可自定义样式)

  • Context Menu;

  • 子菜单;

菜单的使用和我们前面说的AlertDialog很像。它可以支持自定义样式、也可以对菜单的点击事件进行绑定。

Android里有几个MainActivity事件可以覆盖,其中有以下几个事件就是用于处理Menu的。

  • onCreateOptionsMenu(Menu menu),在这个方法里如果你使用menu.add就可以实现在Android的手机里右上角的...图标点击出现系统菜单的效果;

  • onOptionsItemSelected(MenuItem item),这个方法里可以进行每个系统菜单项点击的处理事件;

  • onCreateContextMenu(ContextMenu menu, View v,ContextMenu.ContextMenuInfo menuInfo) ,这个是用来创建ContextMenu的,即这个菜单可以绑定在一个组件上,比如说按一下一个组件,对于这个组件的菜单就会被弹出。但是它要启作用必须在程序运行开始时调用一下Activity里的自带方法:registerForContextMenu(View view);来指定,ContextMenu绑定在哪个组件的身上;

  • onContextItemSelected(MenuItem item),相应的对于ContextMenu的每一个item的点击处理方法,用户可以自定义和覆盖里面的逻辑;

课程目标

  • 做一个可以改变屏幕中间TextView字体颜色的系统菜单;

  • 点一下按钮弹出一个PopMenu;

  • 对于一个TextView绑定一个ContextMenu;

代码

前端代码

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context=".MainActivity">
    <TextView
        android:id="@+id/viewContext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:text="长按出context menu"
        android:textSize="18sp" />
  
    <TextView
        android:id="@+id/textColor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="选择菜单改变颜色"
        android:textSize="18sp" />
  
  
    <Button
        android:id="@+id/btnShowMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textColor"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="10dp"
        android:text="展示弹出菜单" />
  
  
</RelativeLayout>

系统菜单

前端代码

不需要

后端代码

MainActivity.java

系统菜单涉及到两个方法的覆盖,因此只要在这两个方法把系统菜单设上,同时对系统菜单的“选择”事件做出自定义即可,在此我们通过系统菜单改变屏幕中一行字的字体颜色

//1.定义不同颜色的菜单项的标识:
  private final int RED = 101;
  private final int GREEN = 102;
  private final int BLUE = 103;
  private final int YELLOW = 104;
  private final int GRAY = 105;
  private final int CYAN = 106;
  private final int BLACK = 107;
@Override
 public boolean onCreateOptionsMenu(Menu menu) {
     // Inflate the menu; this adds items to the action bar if it is present.
     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;
 }
   @Override
 public boolean onOptionsItemSelected(MenuItem item) {
     int id = item.getItemId();
     switch (id) {
         case RED:
             textColor.setTextColor(Color.RED);
             break;
         case GREEN:
             textColor.setTextColor(Color.GREEN);
             break;
         case BLUE:
             textColor.setTextColor(Color.BLUE);
             break;
         case YELLOW:
             textColor.setTextColor(Color.YELLOW);
             break;
         case GRAY:
             textColor.setTextColor(Color.GRAY);
             break;
         case CYAN:
             textColor.setTextColor(Color.CYAN);
             break;
         case BLACK:
             textColor.setTextColor(Color.BLACK);
             break;
     }
     return super.onOptionsItemSelected(item);
 }

弹出菜单

前端代码

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/mcat" android:title="一只喵" />
    <item android:id="@+id/mdog" android:title="一只汪" />
</menu>

后端代码

btnShowMenu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            PopupMenu popup = new PopupMenu(MainActivity.this,btnShowMenu);
            popup.getMenuInflater().inflate(R.menu.pop_menu, popup.getMenu());
            popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()){
                        case R.id.mcat:
                            Toast.makeText(MainActivity.this,"你轻拍了一下喵",
                                    Toast.LENGTH_SHORT).show();
                            break;
                        case R.id.mdog:
                            Toast.makeText(MainActivity.this,"你轻拍了一下汪",
                                    Toast.LENGTH_SHORT).show();
                            break;
                    }
                    return true;
                }
            });
            popup.show();
        }
    });
}

ContextMenu

前端

context_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <group android:checkableBehavior="none">
        <item android:id="@+id/blue" android:title="@string/font_blue"/>
        <item android:id="@+id/green" android:title="@string/font_green"/>
        <item android:id="@+id/red" android:title="@string/font_red"/>
    </group>
</menu>

后端

我们可以看到这个ContextMenu是绑定在一个TextView上的。

viewContext=(TextView)findViewById(R.id.viewContext);
registerForContextMenu(viewContext);
     //重写上下文菜单的创建方法
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenu.ContextMenuInfo menuInfo) {
        MenuInflater inflator = new MenuInflater(this);
        inflator.inflate(R.menu.context_menu, menu);
        super.onCreateContextMenu(menu, v, menuInfo);
    }
    //上下文菜单被点击是触发该方法
    @Override
    public boolean onContextItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.blue:
                viewContext.setTextColor(Color.BLUE);
                break;
            case R.id.green:
                viewContext.setTextColor(Color.GREEN);
                break;
            case R.id.red:
                viewContext.setTextColor(Color.RED);
                break;
        }
        return true;
    }
}

到此这篇关于Android入门之Menu组件的使用教程详解的文章就介绍到这了


相关推荐

android下vulkan与opengles纹理互通

talkchan · 1158浏览 · 2020-11-23 10:37:39
Android 使用RecyclerView实现轮播图

奔跑的男人 · 2166浏览 · 2019-05-09 17:11:13
微软发布新命令行工具 Windows Terminal

吴振华 · 860浏览 · 2019-05-09 17:15:04
Facebook 停止屏蔽部分区块链广告

· 746浏览 · 2019-05-09 17:20:08
加载中

0评论

评论
我爱编程,我爱工作,更爱生活
小鸟云服务器
扫码进入手机网页