PopupMenu用法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ZHW1551706847/article/details/78030750

PopupMenu是种显示位置不固定的弹出菜单,因为它显示在参照控件下方,所以展示位置随着参照控件的位置变化而变化,而且,坑人的是PopupMenu有两个版本,一个是在v7包中的,一个是在系统自带包中的,我下面讲的是v7包中的,其实两个都是差不多的,导包的时候主要下就可以,下面是创建PopupMenu时会用到的一些方法:
1、创建PopupMenu对象时的构造方法:PopupMenu pop = new PopupMenu(Context context, View anchor);
构造方法中有两个参数,第一参数是上下文对象,参数二是你点击了啥才显示PopupMenu的那个监听的View,比如我点击了Button bt就显示,那我就会给bt进行一个监听,bt.SetOnClickListener(this);然后就会有下面这个方法:

   @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_back://点击返回键
                // 执行返回             
                break;
            case R.id.del_all://点击了加号按钮
                PopupMenu pop = new PopupMenu(this, v);//v是加号控件
                pop.getMenuInflater().inflate(R.menu.history_list_pop_menu, pop.getMenu());
                pop.show();
                pop.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()){
                            case R.id.action_all_delete://点击了删除所有数据
                            //....
                            case R.id.action_hello://点击了...
                            .
                            .
                       上文中的v就是参数二,其实就是bt

2、对上面这段代码几个方法解释下,inflate这个方法可以加载一个PopupMenu的布局文件,要是你不想用pop.getMenuInflater().inflate(R.menu.history_list_pop_menu, pop.getMenu());也可以这样写pop.inflate(R.menu.history_list_pop_menu);也是可以的,我这里的布局文件是history_list_pop_menu,然后show就可以显示了,setOnMenuItemClickListener是对菜单中的选项进行监听的
下面我给出我的布局文件history_list_pop_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"
    xmlns:tools="http://schemas.android.com/tools">
    <item
        android:id="@+id/action_all_delete"
        android:orderInCategory="100"
        android:title="@string/all_delete"
        app:showAsAction="never"
        />
    <item
        android:id="@+id/action_all_share"
        android:orderInCategory="100"
        android:title="@string/all_share"
        app:showAsAction="never"
        />
</menu>

其实到这里,一个普通的PopupMenu已经完成了,但是,还有其他的几个方法也介绍下,可能用的上:
onOpenSubMenu : 显示子菜单。
onCloseSubMenu : 关闭子菜单。
onMenuItemSelected : 选择菜单项。
getMenu : 获得Menu对象。之后便能给Menu对象调用addSubMenu方法添加子菜单;addSubMenu返回一个SubMenu对象,可调用SubMenu的add方法给子菜单添加具体项目。
网上说有这个几个方法,反正我是没有找到,显示子菜单应该是在PopupMenu中再显示一个菜单吧,我怎么什么鬼也没有发现在哪?点击这里查看,这个博客里有提到,反正我找不到这些方法,希望大神们可以找到,或许是我v7包比较老吧!
我这里是可以直接使用的,并不需要什么onOpenSubMenu
看我的代码:

private SubMenu subMenu;
.
.
.
subMenu=popupMenu.getMenu().addSubMenu(0,999,9,"更多");//添加子菜单
        subMenu.add(0, 111, 0, "子菜单1");
        subMenu.add(0, 112, 1, "子菜单2");

我这里直接跳出更多,而且可以直接点击的,点击了更多后,会将子菜单1和子菜单2显示出来。
同样subMenu也是可以监听的。

猜你喜欢

转载自blog.csdn.net/ZHW1551706847/article/details/78030750