系统菜单有两个,分别是:OptionMenu 和 ContextMenu
1、OptionMenu
OptionMenu是Android系统菜单的形式之一,它一般出现在ActionBar右侧;
当Menu的showAsAction属性设置为always时,如下代码:
<?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/action_delete"
android:orderInCategory="100"
app:showAsAction="always"
android:title="删除"/>
</menu>
菜单则直接显示在ActionBar的右侧,如图:
图片.png当Menu的showAsAction属性设置为never时,如下代码:
<?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/action_delete"
android:orderInCategory="100"
app:showAsAction="never"
android:title="删除"/>
</menu>
右侧会出现三个点,这三个点就是ActionBar的Overflow,如图:
图片.png点击之后,会弹出Menu:
图片.pngshowAsAction还有一个属性:ifRoom,当Menu达到一定数量时,ActionBar右侧的菜单和Overflow将同时出现。
OptionMenu主要涉及两个方法,分别是:onCreateOptionsMenu、onOptionsItemSelected
实现代码如下:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.custom, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete:
Toast.makeText(this, "删除被点击", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
2、ContextMenu
ContextMenu,即上下文菜单。
ContextMenu可以和某控件绑定,长按该控件之后,在当前控件上弹出Menu,效果图如下:
图片.png代码实现如下:
Button button = findViewById(R.id.button);
// ContextMenu和按钮绑定
registerForContextMenu(button);
/**
* 创建上下文菜单
*
* @param menu
* @param v
* @param menuInfo
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.custom, menu);
}
/**
* 上下文菜单选择监听
*
* @param item
* @return
*/
@Override
public boolean onContextItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_delete:
Toast.makeText(this, "删除被点击", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
上下文菜单的显示,是通过长按控件弹起的,长按事件有返回值:
// 设置长按事件
button.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return false; // ContextMenu生效
}
});
当返回true时,ContextMenu失效,ContextMenu将不再弹起;
反之,ContextMenu生效。
[本章完...]
网友评论