Menu的分类
1.选项菜单(OptionMenu)
选项菜单是一个应用的主菜单项,用于放置对应用产生全局影响的操作。
操作栏中
菜单的建立
//创建OptionMenu
public boolean onCreateOptionsMenu(Menu menu){
//加载菜单资源
getMenuInflater().inflate(R.menu.option,menu);//两个参数(menu资源,菜单对象)
//return super.onCreateOptionsMenu(menu);需要renturn true,否则菜单不会显示
return true;
}
菜单的属性:
android:showAsAction="always"将本文显示在外面
android:icon="图片"该文本处显示图片,但是此时不显示文本
android:showAsAction="always|withText"//显示图片的同时显示文本
android:showAsAction="never"不会直接在菜单栏外显示
android:showAsAction="collapseActionView"一般和ifRoom一起用,表示折叠该选项,有空间的时候展示(折叠是指在菜单内)
option菜单选项的选中
//optionMenu菜单项的选中方法
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.save:
Toast.makeText(this, "保存", Toast.LENGTH_SHORT).show();
break;
case R.id.setting:
Toast.makeText(this, "设置", Toast.LENGTH_SHORT).show();
break;
case R.id.exit:
Toast.makeText(this, "退出", Toast.LENGTH_SHORT).show();
finish();
break;
}
return true;
}
2.上下文菜单(ContextMenu)
长按某个View不放,就会在屏幕中间弹出ContextMenu
//4.为按钮设置上下文操作模式
//①实现ActionModeCallBack回调接口
//在View的长按事件中去启动上下文操作模式
findViewById(R.id.ctx_btn).setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
startActionMode(cb);
return false;
}
});
}
ActionMode.Callback cb=new ActionMode.Callback(){
//创建,在启动上下文操作模式时(startActionMode(Callback))时调用
@Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
Log.e("TAG","创建");
//上下文资源菜单的配置
getMenuInflater().inflate(R.menu.context,menu);
return true;
}
//在创建方法后进行调用
@Override
public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
Log.e("TAG","准备");
return false;
}
@Override
public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
Log.e("TAG","点击");
switch(menuItem.getItemId()){
case R.id.delte:
Toast.makeText(OptionmenuActivity.this, "删除", Toast.LENGTH_SHORT).show();
break;
case R.id.c1:
Toast.makeText(OptionmenuActivity.this, "操作一", Toast.LENGTH_SHORT).show();
break;
case R.id.c2:
Toast.makeText(OptionmenuActivity.this, "操作二", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
//上下文操作模式结束时被调用
@Override
public void onDestroyActionMode(ActionMode actionMode) {
Log.e("TAG","结束");
}
};
3.弹出菜单(PopupMenu)
一个模态形式的弹出菜单,绑定在某个View上,一般出现在被绑定的View的xiaf。
点击某个控件时这个菜单就会出现在该控件的下方将菜单xml显示出来
//popup_but:演示PopupMenu
Button popupButton=findViewById(R.id.popup_but);
popupButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//①实例化PopupMenu对象(参数2:被绑定的View)
PopupMenu menu=new PopupMenu(OptionmenuActivity.this,popupButton);
//②加载菜单资源:利用MenuInflate将Menu资源加载到PopupMenu.getMenu()中
//将R.menu.xx对于的菜单资源加载到弹出式菜单中
menu.getMenuInflater().inflate(R.menu.popup,menu.getMenu());
//③为PopupMenu设置点击监听事件
menu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch(menuItem.getItemId()){
case R.id.copy:
Toast.makeText(OptionmenuActivity.this, "复制", Toast.LENGTH_SHORT).show();
break;
case R.id.paste:
Toast.makeText(OptionmenuActivity.this, "粘贴", Toast.LENGTH_SHORT).show();
break;
}
return true;
}
});
//④千万不要忘记这一步,显示PopupMenu
menu.show();//显示
}
});