所谓Menu有什么用的?当然是为了节省界面的空间,让屏幕的空间得到合理的利用,Menu有两种,一种是options menu,一种是Context Menu。
一、options Menu
1、在res目录下创建menu文件夹,然后在该文件夹中创建一个新的Menu Resource File,比如叫main。
2、在main.xml中书写所需要的代码。
(1)每一个Menu的菜单项,都使用一个<item>标签来包裹。
(2)通过android:id来给每一个菜单项指定一个唯一的标识符
(3)通过android:titile来个每一个菜单项指定一个名称
<item android:id="@+id/item_add"
android:title="@string/str_addItem"/>
<item android:id="@+id/item_delete"
android:title="@string/str_deleteItem"/>
3、到对应的Activity中重写相对应的方法。
(1)重写onCreateOptionsMenu()方法。
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main,menu);
return true;
}
在该方法中通过getMenuInflater()方法获得MenuInflater对象,然后再调用inflate()方法来给当先的Activity创建菜单。其中,inflate()方法传入两个参数,第一个是我们要用来创建菜单的资源文件,比如前面的main.xml,第二个是用于制动菜单创建到哪一个Menu对象中,这里我们可以直接使用onCreateOptionsMenu()方法中传入的menu参数。最后,给这个方法返回true表示允许菜单显示,如果返回false,则创建的菜单无法显示。
(2)重写onOptionsItemSelected()方法
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.item_add:
Toast.makeText(this, "You Click Add Item!!", Toast.LENGTH_SHORT).show();
break;
case R.id.item_delete:
Toast.makeText(this, "You Click Delete Item!!", Toast.LENGTH_SHORT).show();
break;
default:
break;
}
return true;
}
最后,效果如下:
二、Context Menu
首先,第1,2步与options Menu一样,先创建以及编写资源文件。
3、到对应的Activity中去重写相对应的方法和逻辑。
(1)重写onCreateContextMenu()方法。
与options Menu一样,调用getMenuInflater()方法中的inflate()方法,inflate()中,同样需要传入2个参数,一个是要以哪个资源文件为模板去创建menu,另一个是把menu创建到哪里去。与options Menu不一样的是,Context Menu不需要return true。
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
getMenuInflater().inflate(R.menu.context_menu,menu);
}
(2)重写onContextItemSelected()的方法
@Override
public boolean onContextItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){
case R.id.item_hello:
Toast.makeText(this, "You choose Hello", Toast.LENGTH_SHORT).show();
break;
case R.id.item_goodBye:
Toast.makeText(this, "You choose goodBye", Toast.LENGTH_SHORT).show();
}
return true;
}
(3)在onStart()方法中调用registerForContextMenu()
@Override
protected void onStart() {
registerForContextMenu(mContextMenuButton);
super.onStart();
}
(4)在onStop()中调用unregisterForContextMenu()
@Override
protected void onStop() {
unregisterForContextMenu(mContextMenuButton);
super.onStop();
}
(5)在需要显示出Context menu的控件中调用openContextMenu()
mContextMenuButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openContextMenu(mContextMenuButton);
}
});
4、效果展示
点击按钮出现Cntext Menu