- 再 res 文件夹下创建一个文件夹,命令为:menu ,然后创建menu_option.xml 文件

- activity中的代码如下:(注意,这里的MenuOptionActivity 需要继承于Activity)
public class MenuOptionActivity extends Activity implements View.OnClickListener {
private TextView tv_option;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_option);
tv_option = findViewById(R.id.tv_option);
findViewById(R.id.btn_option).setOnClickListener(this);
findViewById(R.id.btn_skip).setOnClickListener(this);
setRandomTime();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_option) {
openOptionsMenu();
} else if (v.getId() == R.id.btn_skip) {
Intent intent = new Intent(this, MenuContextActivity.class);
startActivity(intent);
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_option, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_change_time) {
setRandomTime();
} else if (id == R.id.menu_change_color) {
tv_option.setTextColor(getRandomColor());
} else if (id == R.id.menu_change_bg) {
tv_option.setBackgroundColor(getRandomColor());
}
return true;
}
private void setRandomTime() {
String desc = DateUtil.getNowDateTime() + "这里是菜单显示文本";
tv_option.setText(desc);
}
private int[] mColorArr = {
Color.BLACK, Color.WHITE, Color.RED, Color.YELLOW, Color.GREEN,
Color.BLUE, Color.CYAN, Color.MAGENTA, Color.GRAY, Color.DKGRAY
};
private int getRandomColor() {
int random = (int)(Math.random() * 10 % 10);
return mColorArr[random];
}
}
- openOptionsMenu 方法弹出的选项菜单都是在页面下方,如下方红框所示:

- 再 res 文件夹下创建一个文件夹,命令为:menu ,然后创建menu_option.xml 文件,和上面可以公用同一个xml文件
- activity中的代码如下:
public class MenuContextActivity extends AppCompatActivity implements View.OnClickListener {
private TextView tv_context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_context);
tv_context = findViewById(R.id.tv_context);
findViewById(R.id.btn_context).setOnClickListener(this);
setRandomTime();
}
@Override
protected void onResume() {
registerForContextMenu(tv_context);
super.onResume();
}
@Override
protected void onPause() {
unregisterForContextMenu(tv_context);
super.onPause();
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_context) {
registerForContextMenu(v);
openContextMenu(v);
unregisterForContextMenu(v);
}
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.menu_option, menu);
}
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.menu_change_time) {
setRandomTime();
} else if (id == R.id.menu_change_color) {
tv_context.setTextColor(getRandomColor());
} else if (id == R.id.menu_change_bg) {
tv_context.setBackgroundColor(getRandomColor());
}
return true;
}
private void setRandomTime() {
String desc = DateUtil.getNowDateTime() + "这里是菜单显示文本";
tv_context.setText(desc);
}
private int[] mColorArr = {
Color.BLACK, Color.WHITE, Color.RED, Color.YELLOW, Color.GREEN,
Color.BLUE, Color.CYAN, Color.MAGENTA, Color.GRAY, Color.DKGRAY
};
private int getRandomColor() {
int random = (int)(Math.random() * 10 % 10);
return mColorArr[random];
}
}
- 效果如下:
- 长按哪里,弹框就从哪里开始显示

- 点击按钮的话,就会出现在页面中部,菜单外的其他页面区域颜色会变深

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?