2021.10.31 清空草稿箱 🚮 2022.10.11
Android studio 菜单栏功能讲解翻译_ZhangJiQun&MXP的博客-CSDN博客
Android studio之菜单_Be your bubble的博客-CSDN博客
Android studio 之 Menu(菜单)_铃儿小铃铛的博客-CSDN博客_androidstudio menu
目录
U4 Android应用界面
4.3 Android菜单设计
Android系统支持3种菜单:
1.选项菜单(Option Menu)2.子菜单(Submenu)3.上下文菜单(Context Menu);
在Activity中可以通过重写onCreateOptionsMenu(Menu menu)方法创建选项菜单,在onCreateOptionsMenu(Menu menu)方法内部可以调用Menu.add()方法实现菜单的添加。
处理事件:重写Acticity的onMenuItemSelected()方法;
4.3.1 Android 选项菜单
选项菜单(Option Menu)分为两类:图标菜单(Icon Menu)和扩展菜单(Expanded Menu);图标菜单在安卓4.0之后,默认为垂直的列表型菜单,可以同时显示文字和图标,图标菜单不支持单选框和复选框控件。
扩展菜单 Android:一步步开发一个高度可定制化的扩展菜单_Brioal的博客-CSDN博客
注意:一般的选项菜单:最多可以有两行,每行3个菜单项,当多余 6 个的时候或出现more,点击显示;
创建:重写 onCreateOptionsMenu() 方法;
事件:重写onOptionsItemSelected()方法 ;
4.3.2 Android上下文菜单
上下文菜单:ContextMenu
说明:选项菜单服务于Activity,上下文菜单是注册到某一个View对象上;
提示:可以为ContextMenu指定标题和图标,但菜单选项不能附带图标;
创建:重写onCreateContextMenu();
事件:重写onContextItemSelected();
注册:registerForContextMenu();
4.3.3 Android子菜单
子菜单:SubMenu
说明:子菜单不能嵌套子菜单,即android中菜单只有两层;
提示:子菜单项不支持显示图标 ;
创建:使用addSubMenu(); 添加具有子菜单的菜单项 ;
4.3.4 Java代码实例
package com.example.menu;
import android.app.Activity;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.Toast;
public class MainActivity extends Activity {
private RelativeLayout myLayout; // 声明布局属性
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myLayout = (RelativeLayout) findViewById(R.id.myLayout); // 获取对象
registerForContextMenu(myLayout); // 注册上下文菜单
}
/*********************************** 选项菜单 Start OptionMenu ************************************************/
// 选项菜单的实现
public boolean onCreateOptionsMenu(Menu menu) {
/*
* 参数说明: 1:组标识 2:菜单项ID ,唯一标识 3: 菜单项摆放的顺序 4:菜单上显示的文字
*/
MenuItem addMenuItem = menu.add(1, 0, 0, "添加"); // 添加菜单项
addMenuItem.setIcon(R.drawable.icon_download2); // 设置图标
MenuItem uppMenuItem = menu.add(1, 1, 1, "修改");
uppMenuItem.setIcon(R.drawable.icon_download2);
/* 子菜单实现 */
SubMenu delSubMenu = menu.addSubMenu(1, 1, 1, "删除"); // 给menu添加子菜单
delSubMenu.setHeaderIcon(R.drawable.icon_download2); // 设置子菜单单出框图标
delSubMenu.setHeaderTitle("删除");
delSubMenu.setIcon(R.drawable.icon_download2); // 创建子菜单的图标
delSubMenu.add(2, 11, 11, "直接"); // 为子菜单添加二级菜单
delSubMenu.add(2, 12, 12, "间接");
SubMenu showSubMenu = menu.addSubMenu(1, 2, 2, "显示"); // 添加子菜单
showSubMenu.setIcon(R.drawable.icon_download2); // 设置子菜单图标
showSubMenu.setHeaderIcon(R.drawable.icon_download2); // 设置弹出框图标
showSubMenu.setHeaderTitle("显示"); // 设置弹出框标题
showSubMenu.add(2, 21, 21, "全显");
showSubMenu.add(2, 21, 22, "慢显");
return true;
}
// 选项菜单选择事件
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
Toast.makeText(MainActivity.this, "选中了" + item.getTitle() + "菜单",
Toast.LENGTH_LONG).show();
break;
case 1:
Toast.makeText(MainActivity.this, "选中了" + item.getTitle() + "菜单",
Toast.LENGTH_LONG).show();
break;
default:
Toast.makeText(MainActivity.this, "选中了" + item.getTitle() + "菜单",
Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
/**
* 选项菜单被关闭时触发该方法: 1、back 按钮被点击 2、menu 按钮再次按下 3、选择了某一个菜单项
*/
public void onOptionsMenuClosed(Menu menu) {
super.onOptionsMenuClosed(menu);
Toast.makeText(MainActivity.this, "选项菜单被关闭了...", Toast.LENGTH_LONG)
.show();
}
/**
* 选项菜单显示之前调用
*
* @return false :此方法把menu点击的动作屏蔽了,onCreateOptionsMenu 方法不会调用
*/
public boolean onPrepareOptionsMenu(Menu menu) {
Toast.makeText(MainActivity.this, "onPrepaareOptionsMenu()方法被调用...",
Toast.LENGTH_LONG).show();
return super.onPrepareOptionsMenu(menu);
}
/***************************************** End OptionMenu **************************************************************/
/***************************************** 上下文菜单 Start ContextMenu **************************************************/
// 创建上下文菜单
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.setHeaderIcon(R.drawable.icon_download2); // 设置上下文菜单标题的图标
menu.setHeaderTitle("设置背景颜色"); // 设置上下文菜单的标题
MenuItem oneMenuItem = menu.add(Menu.NONE, 0, 0, "红色"); // 添加菜单项 一
MenuItem twoMenuItem = menu.add(Menu.NONE, 1, 1, "黑色"); // 添加菜单项 二
}
// 上下文菜单选择事件
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case 0:
Toast.makeText(MainActivity.this, "选择了" + item.getTitle() + "菜单",
Toast.LENGTH_LONG).show();
myLayout.setBackgroundColor(getResources().getColor(R.color.back)); // 设置颜色
break;
case 1:
Toast.makeText(MainActivity.this, "选择了" + item.getTitle() + "菜单",
Toast.LENGTH_LONG).show();
myLayout.setBackgroundColor(getResources().getColor(R.color.red));// 设置颜色
break;
}
return super.onContextItemSelected(item);
}
// 上下文菜单关闭时调用..
public void onContextMenuClosed(Menu menu) {
super.onContextMenuClosed(menu);
Toast.makeText(MainActivity.this, "上下文菜单关闭...", Toast.LENGTH_LONG)
.show();
}
/***************************************** End ContextMenu ***********************************************************/
/***************************************** 子菜单 Start SubMenu ********************************************************/
// 结合选项菜单或者上下文菜单使用,本次结合上选项菜单实现子菜单....
/***************************************** End SubMenu ****************************************************************/
}