之前学习了Android menu菜单,最近需要用到,忘了,所以再次记录一下。
Android menu菜单有三种:
1 选项菜单(OptionsMenu):当用户按手机上的菜单键时自动弹出的菜单
2.上下文菜单(contextMenu):长按某个控件超过2s后弹出的菜单
3.弹出菜单(PopMenu):当用户点击某个控件时弹出的菜单
这里只讲第一种。
首先
在res目录下新建一个menu文件夹,创建一个xml文件
编辑menu.xml文件(此文件可自定义名称,不用叫menu)
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/id1"
android:title="菜单3"
android:orderInCategory="300"
app:showAsAction="never"></item>
<item android:id="@+id/id2"
android:title="菜单5"
android:orderInCategory="500"
app:showAsAction="never"></item>
<item android:id="@+id/id3"
android:title="菜单1"
app:showAsAction="always"></item>
<item android:id="@+id/id4"
android:title="菜单1"
app:showAsAction="never"></item>
</menu>
讲一下各个属性
id:指定菜单项的唯一标识
title:菜单项上显示的文字,即菜单标题
orderInCategory:指定菜单在类别中的排序号,数字越大越靠近手机底部,不设置的话就按先后顺序显示。
showAsAction:指定菜单项的显示方式。有always、never等选择(其他的我我也没弄清楚,就不瞎说了)
always显示在菜单外面,never显示在菜单里面。
菜单1我设置了always所以在外面,其他的在里面。
要实现这个效果要在你需要显示的activity中重写两个函数onCreateOptionsMenu和onOptionsItemSelected
@Override
public boolean onCreateOptionsMenu(Menu menu) { //加载menu布局
MenuInflater inflater=getMenuInflater();
inflater.inflate(R.menu.menu,menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) { //给menu添加点击事件
switch(){
//具体逻辑操作
}
return true;
}
2.弹出菜单 PopupMenu
PopupMenu需要两个参数,第一个是context
,第二个是PopupMenu所依赖的view,就是对应的控件
@OnClick(R.id.top_right_view)
public void onViewClicked() {
PopupMenu popupMenu = new PopupMenu(SettingEqActivity.this, topRightIv);
getMenuInflater().inflate(R.menu.eq_menu, popupMenu.getMenu());
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.eq_menu_reset:
Toast.makeText(SettingEqActivity.this, "重置", Toast.LENGTH_SHORT).show();
return true;
case R.id.eq_menu_save:
Toast.makeText(SettingEqActivity.this, "保存", Toast.LENGTH_SHORT).show();
return true;
case R.id.eq_menu_loading_interface:
Toast.makeText(SettingEqActivity.this, "加载", Toast.LENGTH_SHORT).show();
return true;
case R.id.eq_menu_loading_firmware:
Toast.makeText(SettingEqActivity.this, "导入", Toast.LENGTH_SHORT).show();
return true;
case R.id.eq_menu_export_firmware:
Toast.makeText(SettingEqActivity.this, "导出", Toast.LENGTH_SHORT).show();
return true;
default:
return false;
}
}
});
popupMenu.show();
}