在活动中使用菜单Menu和PopupMenu

在Activity中使用Menu和PopupMenu

流程:

  1. 点击res目录新建Android resouce file文件,选择resoucetypemenu,然后可以创建如下菜单的布局:
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/refresh_item"
android:title="刷新"/>
<item android:id="@+id/change_city"
android:title="选择城市"/>
</menu>
  1. 然后在活动中重写onCreateOptionsMenu(Menu menu)方法:

    1
    2
    3
    4
    5
    public boolean onCreateOptionsMenu(Menu menu) {
    //R.menu.menu就是menu的布局文件
    getMenuInflater().inflate(R.menu.menu,menu);
    return true;
    }

  2. 然后在手机上点击”菜单”就可以弹出菜单了,该菜单是从屏幕底部弹出的.

当然我们也可以为点击菜单上的项目注册响应事件,通过重写onOptionsItemSelected()方法:

1
2
3
4
5
6
7
8
9
10
11
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.refresh_item:
//加入逻辑
break;
case R.id.change_city:
//加入逻辑
break;
}
return super.onOptionsItemSelected(item);
}
  1. 有时候我们希望通过点击屏幕上自己定义的一个组件弹出一个菜单来,并且这个菜单就在这个组件的周围,那么可以这么来写(还是使用刚刚我们定义的menu布局文件):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Button button = (Button)findViewById(R.id.refresh);
    //点击这个按钮就能弹出一个菜单来
    button.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View view) {
    PopupMenu popupMenu = new PopupMenu(MainActivity.this,view);
    popupMenu.getMenuInflater().inflate(R.menu.menu,popupMenu.getMenu());
    popupMenu.show();
    }
    });

​ 在刷新按钮的周围弹出了一个菜单

弹出popupMenu

​ 当然我们也可以为PopupMenu响应点击事件:

1
2
3
4
5
6
7
8
9
10
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener()  {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch(menuItem.getId()){
case R.id.refresh_item
//加入自己的逻辑(点击以后发生的事件)
}
return false;
}
});