一、选项菜单(OptionMenu)

  • res目录下新建menu目录,用于放置菜单布局文件(右键res->new->Android Resource Directory->menu)
  • menu下创建菜单布局文件,根标签为menu,menu下面有多个group,group下面有多个item.

    简单示例如下:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/oi_1"
android:title="编程语言"
android:checkable="true"></item>
<item
android:id="@+id/oi_2"
android:checkable="true"
android:title="算法"></item>
</menu>
  • 重写ActivityonCreateOptionsMenu方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//根据菜单布局文件填充菜单项
getMenuInflater().inflate(R.menu.menu_options, menu);
return true;
}
  • 监听菜单项
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.oi_1:
doSomething....
return true;
case R.id.oi_2:
doSomething....
return true;
case R.id.oi_3:
doSomething....
return true;
case R.id.oi_4:
doSomething....
return true;
default:
doSomething....
return super.onOptionsItemSelected(item);
}
}

二、上下文菜单

  • 创建菜单布局文件
  • 为指定view(可以是Button,TextView等等)注册上下文菜单
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_context_menu);
//这是一个按钮
Button colorSelector = findViewById(R.id.btn_color_selector);
//为button注册上下文菜单
registerForContextMenu(colorSelector);
}
  • 重写ActivityonCreateOptionsMenu方法
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
//为菜单设置title
menu.setHeaderTitle("please select your favorite color:");
//填充菜单项
getMenuInflater().inflate(R.menu.menu_context, menu);
}
  • 监听菜单项
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch(item.getItemId()){
case R.id.ci_red:
colorSelector.setBackgroundColor(Color.parseColor("red"));
return true;
case R.id.ci_purple:
colorSelector.setBackgroundColor(Color.parseColor("purple"));
return true;
case R.id.ci_white:
colorSelector.setBackgroundColor(Color.parseColor("white"));
return true;
}
return super.onContextItemSelected(item);
}
  • 取消注册
@Override
protected void onDestroy() {
super.onDestroy();
//取消注册,防止内存溢出
unregisterForContextMenu(colorSelector);
}

三、弹出式菜单

  • 创建菜单布局文件
  • 监听指定view点击事件,同时构建弹出菜单对象
//这是对应button的点击监听事件
public void showPopupMenu(View view) {
final PopupMenu menu = new PopupMenu(PopupMenuActivity.this, view);
getMenuInflater().inflate(R.menu.menu_popup, menu.getMenu());
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
switch (item.getItemId()) {
case R.id.pi_hide:
//菜单隐藏
menu.dismiss();
return true;
default:
Toast.makeText(PopupMenuActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
}
});
menu.show();
}

最新文章

  1. java从基础知识(九)I/O
  2. 两天以来对plsqldev操作的记忆
  3. Android基础总结(9)——网络技术
  4. Node.js:实现知乎(www.zhihu.com)模拟登陆,获取用户关注主题
  5. GIS大讲堂内所有讲座的索引(更新至2008年6月26日)(转)
  6. iOS9之后对于NSURL的编码转换方法变化说明
  7. loadrunner入门篇-Vuser发生器
  8. Java进阶(四十七)Socket通信
  9. PAT1027:Colors In Mars
  10. EditText以及登录UI实现
  11. 学习HTML+JSP(更新中)
  12. Go Deeper HDU - 3715(2 - sat 水题 妈的 智障)
  13. git分支流
  14. shell命令——cut
  15. 解决 ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
  16. Python3 命令行参数
  17. xunsearch bsd 10.1安装心酸路。。。
  18. P5019 铺设道路 (NOIP2018)
  19. Nodejs课堂笔记—第一课:修改Webstorm的默认主题
  20. mybatis使用序列批量插入数据

热门文章

  1. Ionic4.x 中的 UI 组件(UI Components) Slides 轮播图组件、Searchbar 组件、 Segment 组件
  2. 一台java服务器可以跑多少个线程?
  3. Qt学习过程
  4. Qt编写自定义控件58-直方对称图
  5. Qt编写自定义控件41-自定义环形图
  6. iOS-NSURLConnection异步发送 HTTP请求
  7. iOS-UINavigationController多控制器管理
  8. jenkins的maven插件
  9. 移动架构-手写ButterKnife框架
  10. TiKV事务实现浅析