Android Studio之菜单栏制作

静态菜单栏XML文件准备工作

一、准备好布局首页展示页面XML文件

该布局文件适应于三种菜单栏。

此处说明一下菜单栏的种类:选项菜单(也称三点菜单键)、上下文菜单(长按菜单)、弹出式菜单(点击菜单)

代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><TextViewandroid:id="@+id/textView"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="山有木兮木有枝,心悦君兮君不知"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintRight_toRightOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintVertical_bias="0.242" /><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选项一"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.69"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView"app:layout_constraintVertical_bias="0.254" /><Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="选项二"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintHorizontal_bias="0.309"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toBottomOf="@+id/textView"app:layout_constraintVertical_bias="0.252" /></androidx.constraintlayout.widget.ConstraintLayout>

二、准备好菜单栏的布局文件

1、先建一个存放菜单栏的XML文件夹,看下图的创建步骤,先找到res->New->Directory

2、填写文件夹的名字,最好看名知意。(menu)

3、创建一个menu的资源文件,menu -> New -> Menu Resource File

4、填写新建的资源文件的名字

这里我创建了两个菜单资源文件:

代码如下:

menu1:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><item android:id="@+id/one1"android:title="菜单一"></item><item android:id="@+id/one2"android:title="菜单二"></item><item android:id="@+id/one3"android:title="菜单三"></item><item android:id="@+id/one4"android:title="菜单四"></item></menu>

menu2:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width = "match_parent"android:layout_height = "match_parent"><item android:id="@+id/bu1"android:title="选项一"></item><item android:id="@+id/bu2"android:title="选项一"></item><item android:id="@+id/bu3"android:title="选项一"></item></menu>

准备好之后,下面开始写Java代码。

选项菜单

1、定义所需要的全局变量

2、在函数onCreate(Bundle savedInstanceState)函数里获取上面定义的全局变量的资源

上面两步是必写的,下面的步骤不介绍了。

3、重写Activity的onCreateOptionsMenu(Menu menu)方法,在该方法中调用Menu对象来添加菜单或者子菜单。

4、需要应用程序响应菜单项的点击事件,可重写Activity的onOptionsItemSelected(MenuItem item)方法,调用item.getItemId()获得被点击菜单项的ID,做出不同的响应

java代码:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {//定义按钮的全局变量private Button button;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 绑定按钮的资源(利用id找到xml文件中的按钮)button = findViewById(R.id.button);textView = findViewById(R.id.textView);}@Override//重写获取菜单项的方法public boolean onCreateOptionsMenu(Menu menu) {MenuInflater inflater=getMenuInflater();//获取菜单Inflater,MenuInflater加载menu布局文件inflater.inflate(R.menu.menu1,menu);//通过inflate获取菜单资源return true;}@Override//菜单项被点击时的逻辑处理public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()){case R.id.one1:Toast.makeText(MainActivity.this,"我是一",Toast.LENGTH_LONG).show();break;case R.id.one2:Toast.makeText(MainActivity.this,"我是二",Toast.LENGTH_LONG).show();break;case R.id.one3:Toast.makeText(MainActivity.this,"我是三",Toast.LENGTH_LONG).show();break;case R.id.one4:Toast.makeText(MainActivity.this,"我是四",Toast.LENGTH_LONG).show();break;default:return true;}return true;}}

效果图如下:

上下文菜单

1、重写Activity的onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo)方法。

2、调用Activity的registerForContextMenu(textView)方法为View组件注册上下文菜单

2、重写Activity的onContextItemSelected(MenuItem item)响应菜单项的选择操作,调用item.getItemId()获得被点击菜单项的ID,做出不同的响应

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class MainActivity extends AppCompatActivity {//定义按钮的全局变量private Button button;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 绑定按钮的资源(利用id找到xml文件中的按钮)button = findViewById(R.id.button);textView = findViewById(R.id.textView);//为组件注册上下文菜单registerForContextMenu(textView);}//重写Activity的onCreateContextMenu()public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo){switch (v.getId()){case R.id.textView:menu.setHeaderTitle("分享到,,,");menu.add(0,200,0,"qq空间");menu.add(0,201,0,"朋友圈");SubMenu submenu = menu.addSubMenu(0,200,0,"微博");submenu.add(0,202,0,"新浪");submenu.add(0,203,0,"新浪");submenu.add(0,204,0,"新浪");default:break;}super.onCreateContextMenu(menu,v,menuInfo);}//重写Activity的onContextItemSelected()public boolean onContextItemSelected(MenuItem item){switch (item.getItemId()){case 200:Toast.makeText(MainActivity.this,"你选了一",Toast.LENGTH_LONG).show();break;case 201:Toast.makeText(MainActivity.this,"你选了二",Toast.LENGTH_LONG).show();break;case 203:Toast.makeText(MainActivity.this,"你选了三",Toast.LENGTH_LONG).show();break;case 204:Toast.makeText(MainActivity.this,"你选了四",Toast.LENGTH_LONG).show();break;default:return super.onOptionsItemSelected(item);}return true;}}

效果图如下:(长按哦!)

弹出式菜单

1、调用new PopupMenu(Context context,View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件

2、调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中

turn super.onOptionsItemSelected(item);
}
return true;
}

}

弹出式菜单

1、调用new PopupMenu(Context context,View anchor)创建下拉菜单,anchor代表要激发该弹出菜单的组件

2、调用MenuInflater的inflate()方法将菜单资源填充到PopupMenu中

3、调用PopupMenu的show()方法显示弹出式菜单

   package com.example.myapplication;import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;import androidx.appcompat.view.menu.MenuPopupHelper;import android.annotation.SuppressLint;import android.os.Build;import android.os.Bundle;import android.view.ContextMenu;import android.view.Menu; import android.view.MenuInflater;import android.view.MenuItem;import android.view.SubMenu; import android.view.View;import android.widget.Button;import android.widget.PopupMenu;import android.widget.TextView;import android.widget.Toast;import android.widget.TextView;import android.widget.Toast; import java.lang.reflect.Field;import java.lang.reflect.Method;public class MainActivity extends AppCompatActivity {//定义按钮的全局变量private Button button;private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 绑定按钮的资源(利用id找到xml文件中的按钮)button = findViewById(R.id.button);textView = findViewById(R.id.textView);registerForContextMenu(textView);button.setOnClickListener(new View.OnClickListener() {@SuppressLint("RestrictedApi")@RequiresApi(api = Build.VERSION_CODES.KITKAT)@Overridepublic void onClick(View v) {//创建PopupMenuPopupMenu popupMenu = new PopupMenu(MainActivity.this,button);//加载菜单资源popupMenu.getMenuInflater().inflate(R.menu.menu2, popupMenu.getMenu());//菜单事件监听popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){@Overridepublic boolean onMenuItemClick(MenuItem item) {switch (item.getItemId()){case R.id.bu1:Toast.makeText(MainActivity.this,"复制",Toast.LENGTH_LONG).show();break;case R.id.bu2:Toast.makeText(MainActivity.this,"粘贴",Toast.LENGTH_LONG).show();break;case R.id.bu3:Toast.makeText(MainActivity.this,"清除",Toast.LENGTH_LONG).show();break;default:break;}return true;}});//使用反射,强制显示菜单图标try {Field field = popupMenu.getClass().getDeclaredField("mm");field.setAccessible(true);MenuPopupHelper menuPopupHelper = (MenuPopupHelper) field.get(popupMenu);menuPopupHelper.setForceShowIcon(true);}catch (IllegalAccessException | NoSuchFieldException e){e.printStackTrace();}popupMenu.show();}});}}

///
///
///

关于Java代码有很多包名,如果有哪个方法没有找到什么包可以 “Alt+Enter”快捷键帮你找到这个地方的可能需要要导入的包或者其他。
整个代码的引入是从第一个写到最后一个菜单的累加的。

Android Studio之菜单栏制作相关推荐

  1. 深度学习(六)——CNN识别典型地标建筑,并制作pb文件,部署在android studio端,制作app实现该功能

    一.背景 两年前的一个项目,识别典型地标,并对图片进行标记.这里只写一下简单思路,最开始是打算用特征点匹配来做的,可以参考:基于特征点匹配方法--SIFT, SURF, ORB的图像识别 ,后来发现效 ...

  2. Android studio 可视化图表制作

    Android studio 图表实现,和动态更新 今天做客户端的时候,客户有个我没做过的需求 要实现界面有个曲线图,随着下位机传递的数据更新图表,过于老的数据需要剔除,曲线跟着移动,网上找到个宝藏库 ...

  3. Android Studio Template模板 制作模板

    原文地址:http://blog.csdn.net/lmj623565791/article/details/51635533 1.概述 本文将对如何编写Template,进行详细的介绍(以activ ...

  4. Android Studio学习之制作音乐盒

    效果图大概如下 这个功能的完成主要是广播和服务的应用 1.首先需要创建一个asset文件夹用来放音乐文件 然后将MP3文件拖入这个文件夹 2.在mainfest里添加一行代码: <service ...

  5. Android studio 利用MPAndroidChart制作饼图

    1.在项目的build.gradle下面的allprojects里面添加 maven { url "https://jitpack.io" } 这行代码 allprojects { ...

  6. Android Studio 简易通讯录制作 (Java)

    通讯录首页: 添加联系人页面: 修改联系人: 删除联系人: 程序代码: MainActivity.java package com.example.myapplication;import andro ...

  7. Android studio利用MPAndroidChart制作简单柱形图

    1.在项目的build.gradle的allprojects添加 maven { url "https://jitpack.io" } allprojects {repositor ...

  8. android studio 启动画面,Android Studio 利用Splash制作APP启动界面的方法

    public class SplashActivity extends Activity { // private final int SPLASH_DISPLAY_LENGHT = 2000; // ...

  9. Android Studio 连接阿里云数据库【制作基于数据库的多人远程聊天APP】

    Android Studio 连接阿里云数据库的简单方法[制作基于数据库的多人远程聊天APP] 首先购买好一个阿里云数据库RDS[我买了一年用了49元] 1.进入官网–>打开右上角的控制台 2. ...

最新文章

  1. 程序员,应该掌握的英语词汇
  2. 进程间的通信方式:简介
  3. 【js笔记】数组那些事[0]
  4. 【mysql】已经创建表后,修改某列的默认值
  5. 【学术相关】是什么让女性在计算机史上“隐身”了?
  6. python项目部署nginx_【python】Django web项目部署(Nginx+uwsgi)
  7. Python 编码问题:‘ascii‘ codec can‘t encode characters in position 的解决方案(中文乱码终极解决方案)
  8. 全球首发!惯性导航导论(剑桥大学)第九部分
  9. Android AlarmManager设置多个定时事件时只最后一个有效问题解决
  10. mysql 按小时统计
  11. android游戏分成,原神半年吸金10亿美元,为何国内Android商店还秉承着55分成?
  12. 打算开源一个低代码平台,第二天,包含【工作流,业务流,财务,APQC】。技术站 React,typescript,java,mysql
  13. python三维建模可以加 贴图_三维模型都有哪些绘制贴图的软件??
  14. 两分钟,帮你搞懂光纤接头
  15. 多开工具,终于给找来了~
  16. 2019HDU多校第一场1001 BLANK (DP)(HDU6578)
  17. 巴基斯坦圣诞节期间“毒酒”致42人死亡
  18. 汤晓丹的第四版计算机操作系统--第九章总结概述
  19. 做一个像植物大战僵尸的Flash游戏3
  20. 马斯克最新访谈:关于自动驾驶、AI和特斯拉人形机器人

热门文章

  1. \加密与解密应用\使用AIDE做入侵检测\扫描与抓包分析\加密与解密应用
  2. linux 内存取证_内存取证工具-volatility、foremost
  3. Linux msr寄存器手册,MSR寄存器
  4. WARN Error while fetching metadata with correlation id 1 : {hotitems=LEADER_NOT_AVAILABLE}
  5. http host header
  6. CCS9使用proteus仿真TMSF320F28027
  7. 3个面试谈薪技巧,轻松拿下比期望薪资高2K的offer(建议收藏)
  8. 英文写作—Grammarly安装及下载
  9. 华为路由器负载均衡_华为路由器双出口负载均衡+备份(示例代码)
  10. 智慧校园之蓝牙定位在学校中的应用,蓝牙室内定位-新导智能