美文网首页
Android PopupWindow 的使用

Android PopupWindow 的使用

作者: Ello_Orld | 来源:发表于2018-09-28 17:01 被阅读8次

    如果要求弹出的PopupWindow里面是一个列表,我们使用时都是在里面套个ListView或RecyclerView ,现在我们不需要在做这样繁琐的工作了。
    在官方android.support.v7.widget 包下提供的 PopupMenu 组件。

    PopupMenu,弹出菜单,一个模态形式展示的弹出风格的菜单,绑在在某个View上,一般出现在被绑定的View的下方(如果下方有空间)。

    使用方法:

    1. 新建menu.xml
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item
            android:id="@+id/menu1"
            android:title="菜单1" />
        <item
            android:id="@+id/menu2"
            android:title="菜单2" />
        <item
            android:id="@+id/menu3"
            android:title="菜单3" />
    </menu>
    
        PopupMenu popupMenu;
    
        private void showPopMenu() {
            if (popupMenu == null) {
                popupMenu = new PopupMenu(ParentFrm, menu_more);
                popupMenu.getMenuInflater().inflate(R.menu.reset_menu, popupMenu.getMenu());
                popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {
                        switch (item.getItemId()) {
                            case R.id.menu1:
                                // TODO: 2018/9/28  
                                break;
                            default:
                                break;
                        }
                        return true;
                    }
                });
            }
            popupMenu.show();
        }
    

    3.如果需要显示图标的话:
    以前用到带图标的菜单时,一般都是通过自定义 PopupWindow 来实现的,比较麻烦,其实 PopupMenu 可以很简单的实现这个功能,不过需要用到反射。关于反射,我理解的不深,所以下面的代码也是从网上粘贴过来的。细心的同学可能会发现,在 xml 资源文件中,我在每个 item 标签里都写了 icon 的属性。没错,要显示的正是在这里设置的图片。当然,如果你不需要显示图标的话,icon 是没有必要写的。

    try {
                Field field = popupMenu.getClass().getDeclaredField("mPopup");
                field.setAccessible(true);
                MenuPopupHelper helper = (MenuPopupHelper) field.get(popupMenu);
                helper.setForceShowIcon(true);
            } catch (NoSuchFieldException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
    
    20180928_214335.png

    参考链接:https://www.jianshu.com/p/60a34a4d52bd

    相关文章

      网友评论

          本文标题:Android PopupWindow 的使用

          本文链接:https://www.haomeiwen.com/subject/sumpoftx.html