选项菜单和子菜单
package com.example.myapplication;
import android.app.Activity;
import android.graphics.Color;
import android.media.midi.MidiDeviceService;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.SubMenu;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
final int FONT_10 = 0x111;
final int FONT_12 = 0x112;
final int FONT_14 = 0x113;
final int FONT_16 = 0x114;
final int FONT_18 = 0x115;
final int PLAIN_ITEM = 0x11b;
final int FONT_RED = 0x116;
final int FONT_BLUE = 0x117;
final int FONT_GREEN = 0x118;
private EditText edit;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit = findViewById(R.id.txt);
}
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu fontMenu = menu.addSubMenu("字体大小");
fontMenu.setIcon(R.drawable.ic_launcher_foreground);
fontMenu.setHeaderIcon(R.drawable.ic_launcher_background);
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.add(0, PLAIN_ITEM, 0, "普通选项");
SubMenu colorMenu = menu.addSubMenu("颜色");
colorMenu.setIcon(R.drawable.ic_launcher_background);
colorMenu.setHeaderIcon(R.drawable.ic_launcher_foreground);
colorMenu.setHeaderTitle("选择文字颜色");
colorMenu.add(0, FONT_RED, 0, "红色");
colorMenu.add(0, FONT_GREEN, 0, "绿色");
colorMenu.add(0, FONT_BLUE, 0, "蓝色");
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem mi) {
switch (mi.getItemId()) {
case FONT_10:
edit.setTextSize(10 * 2);
break;
case FONT_12:
edit.setTextSize(12 * 2);
break;
case FONT_14:
edit.setTextSize(14 * 2);
break;
case FONT_16:
edit.setTextSize(16 * 2);
break;
case FONT_18:
edit.setTextSize(18 * 2);
break;
case FONT_RED:
edit.setTextColor(Color.RED);
break;
case FONT_GREEN:
edit.setTextColor(Color.GREEN);
break;
case FONT_BLUE:
edit.setTextColor(Color.BLUE);
break;
case PLAIN_ITEM:
Toast toast = Toast.makeText(MainActivity.this, "您点击了普通菜单项", Toast.LENGTH_SHORT);
toast.show();
break;
}
return true;
}
}
设置与菜单项关联的Activity-跳转Activity
package com.example.myapplication;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu prog = menu.addSubMenu("启动程序");
prog.setHeaderTitle("请选择你要启动的程序");
prog.setHeaderIcon(R.drawable.ic_launcher_background);
MenuItem item = prog.add("查看Swift");
item.setIntent(new Intent(this, OthterActivity.class));
return super.onCreateOptionsMenu(menu);
}
}
上下文菜单
package com.example.myapplication;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
final int MENU1 = 0x111;
final int MENU2 = 0x112;
final int MENU3 = 0x113;
TextView txt;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txt = findViewById(R.id.txt);
registerForContextMenu(txt); //常按
}
public void onCreateContextMenu(ContextMenu menu, View source, 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.ic_launcher_foreground);
menu.setHeaderTitle("选择背景色");
}
public boolean onContextItemSelected(MenuItem mi) {
switch (mi.getItemId()) {
case MENU1:
mi.setChecked(true);
txt.setBackgroundColor(Color.RED);
break;
case MENU2:
mi.setChecked(true);
txt.setBackgroundColor(Color.GREEN);
break;
case MENU3:
mi.setChecked(true);
txt.setBackgroundColor(Color.BLUE);
break;
}
return true;
}
}
使用XML资源文件定义菜单
package com.example.myapplication;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.PopupMenu;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
PopupMenu popupMenu = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void onPopupButtonClick(View button) {
popupMenu = new PopupMenu(this, button);
getMenuInflater().inflate(R.layout.popup_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.exit:
popupMenu.dismiss();
break;
default:
Toast.makeText(MainActivity.this, "您单击了[" + item.getTitle() + "]菜单项", Toast.LENGTH_SHORT).show();
}
return true;
}
});
popupMenu.show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/search"
android:icon="@android:drawable/ic_menu_search"
android:title="查找" />
<item
android:id="@+id/add"
android:icon="@android:drawable/ic_menu_add"
android:title="添加" />
<item
android:id="@+id/edit"
android:icon="@android:drawable/ic_menu_edit"
android:title="编辑">
<menu>
<item
android:id="@+id/copy"
android:title="复制" />
<item
android:id="@+id/cut"
android:title="剪切" />
<item
android:id="@+id/paste"
android:title="粘贴" />
</menu>
</item>
<item
android:id="@+id/exit"
android:title="隐藏菜单" />
</menu>