菜单在桌面上应用广泛,几乎所有的桌面应用都有菜单。与桌面应用的菜单不同,Android应用中的菜单默认是看不见的,只有当用户按下手机上的"MENU"键时,系统才会显示该应用关联的菜单,这种菜单叫选项菜单(Option Menu)。
Android应用同样支持上下文菜单(ContextMenu),当用户一直按住某个组件时,该组件所关联的上下文菜单就会显示出来。
1.SubMenu setHeaderIcon(Drawable icon):设置菜单头的图标。
2.SubMenu setHeaderIcon(int iconRes):设置菜单头的图标。
3.SubMenu setHeaderTitle(int titleRes):设置菜单头的标题。
4.SubMenu setHeaderTitle(CharSequence title):设置菜单头的标题。
5.SubMenu setHeaderView(View view):使用View来设置菜单头。
下面的程序示范了如何为Andoid应用添加菜单和子菜单。如下是运行图:
2.ContextMenu setHeaderIcon(int iconRes):为上下文菜单设置图标。
3.ContextMenu setHeadeerTitle(int titleRes):为上下文菜单设置标题。
下面的程序示范了如何开发上下文菜单,运行图片如下:
Android应用同样支持上下文菜单(ContextMenu),当用户一直按住某个组件时,该组件所关联的上下文菜单就会显示出来。
SubMenu继承了Menu,它就代表一个子菜单,额外提供了如下常用方法:
1.SubMenu setHeaderIcon(Drawable icon):设置菜单头的图标。
2.SubMenu setHeaderIcon(int iconRes):设置菜单头的图标。
3.SubMenu setHeaderTitle(int titleRes):设置菜单头的标题。
4.SubMenu setHeaderTitle(CharSequence title):设置菜单头的标题。
5.SubMenu setHeaderView(View view):使用View来设置菜单头。
下面的程序示范了如何为Andoid应用添加菜单和子菜单。如下是运行图:
在layout下的activity_main.xml下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Main3Activity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选项菜单测试"
android:textSize="24dp"/>
</LinearLayout>
在MainActivity.java中:
package com.example.test05;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.TextView;
import android.widget.Toast;
public class Main3Activity extends AppCompatActivity {
// 定义“字体大小”菜单项标识
private static final int FONT_10=0x111;
private static final int FONT_12=0x112;
private static final int FONT_14=0x113;
private static final int FONT_16=0x114;
private static final int FONT_18=0x115;
// 定义“普通菜单项”的标识
private static final int PLAIN_ITEM=0x11b;
// 定义“字体颜色”菜单项标识
private static final int FONT_RED=0x116;
private static final int FONT_BLUE=0x117;
private static final int FONT_GREEN=0x118;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
text=findViewById(R.id.text);
}
// 当用户单击Menu按键时触发该方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// -------------向menu中添加“字体大小”的子菜单------------
SubMenu fontmenu=menu.addSubMenu("字体大小");
// 设置菜单的图标
fontmenu.setIcon(R.drawable.arrow);
// 设置菜单头的图标
fontmenu.setHeaderIcon(R.drawable.arrow);
// 设置菜单头的标题
fontmenu.setHeaderTitle("选择字体的大小");
fontmenu.add(0,FONT_10,0,"10号字体");
fontmenu.add(0,FONT_12,0,"12号字体");
fontmenu.add(0,FONT_14,0,"14号字体");
fontmenu.add(0,FONT_16,0,"16号字体");
fontmenu.add(0,FONT_18,0,"18号字体");
// --------------向menu中添加“普通菜单项”---------------
menu.add(0,PLAIN_ITEM,0,"普通菜单项");
// ----------------向menu中添加“字体颜色”的子菜单--------
SubMenu colorMenu=menu.addSubMenu("字体颜色");
colorMenu.setIcon(R.drawable.arrow);
// 设置菜单头的图标
colorMenu.setHeaderIcon(R.drawable.arrow);
// 设置菜单头的标题
colorMenu.setHeaderTitle("选择文字颜色");
colorMenu.add(0,FONT_RED,0,"红色");
colorMenu.add(0,FONT_BLUE,0,"蓝色");
colorMenu.add(0,FONT_GREEN,0,"绿色");
return super.onCreateOptionsMenu(menu);
}
// 选项菜单的菜单项被单击后的回调方法
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem mi) {
// 判断单击的是哪个菜单项,针对性的做出回应
switch (mi.getItemId()){
case FONT_10:text.setTextSize(10*2);break;
case FONT_12:text.setTextSize(12*2);break;
case FONT_14:text.setTextSize(14*2);break;
case FONT_16:text.setTextSize(16*2);break;
case FONT_18:text.setTextSize(18*2);break;
case FONT_RED:text.setTextColor(Color.RED);break;
case FONT_BLUE:text.setTextColor(Color.BLUE);break;
case FONT_GREEN:text.setTextColor(Color.GREEN);break;
case PLAIN_ITEM:
Toast.makeText(this, "您单击了普通菜单项",
Toast.LENGTH_SHORT).show();
break;
}
return true;
}
}
用ContextMenu来代表上下文菜单
ContextMenu提供了如下的方法,同样可以为上下文菜单设置图标、标题等:
1.ContextMenu setHeaderIcon(Drawable icon):为上下文菜单设置图标。2.ContextMenu setHeaderIcon(int iconRes):为上下文菜单设置图标。
3.ContextMenu setHeadeerTitle(int titleRes):为上下文菜单设置标题。
下面的程序示范了如何开发上下文菜单,运行图片如下:
在layout下的activity_main.xml下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="通过上下文菜单修改背景色"
android:textSize="24dp"/>
</LinearLayout>
在MainActivity.java中:
package com.example.menuprogram;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
// 为菜单定义一个标识
private static final int MENU1=0x111;
private static final int MENU2=0x112;
private static final int MENU3=0x113;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text=findViewById(R.id.text);
// 为文本框注册上下文菜单
registerForContextMenu(text);
}
// 创建上下文菜单时触发该方法
@Override
public void onCreateContextMenu(ContextMenu menu,
View v, ContextMenu.ContextMenuInfo menuInfo) {
menu.add(0,MENU1,0,"红色");
menu.add(0,MENU2,0,"绿色");
menu.add(0,MENU3,0,"蓝色");
// 将三个菜单项设为单选菜单项
menu.setGroupCheckable(0,true,true);
// 设置上下文菜单的标题、图标
menu.setHeaderIcon(R.drawable.arrow);
menu.setHeaderTitle("选择背景色");
}
// 上下文菜单的菜单项被单击时触发该方法
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case MENU1:text.setBackgroundColor(Color.RED);break;
case MENU2:text.setBackgroundColor(Color.GREEN);break;
case MENU3:text.setBackgroundColor(Color.BLUE);break;
}
return true;
}
}
如果这篇文章对你有帮助,欢迎关注小白,给小白一个鼓励的赞吧,爱点赞的人运气都不会太差。