Skip to content

上下文菜单 PopMenu

Kongzue edited this page Dec 1, 2022 · 21 revisions

📜上下文菜单 PopMenu

简单提示 PopTip

提供一个轻量化的菜单,可以附着于一个 View 展开,或者在屏幕中央直接显示,用于实现简单选择。

也可以使用 其他主题 以丰富菜单的样式:

简单提示 PopTip

显示一个简单 PopMenu

使用以下代码显示一个 PopMenu

PopMenu.show(new String[]{"添加", "编辑", "删除", "分享"});

也可以使用 List<CharSequence> 来设置菜单内容。

为 PopMenu 设置图标

PopMenu.show(new String[]{"添加", "编辑", "删除", "分享"})
        .setOnIconChangeCallBack(new OnIconChangeCallBack<PopMenu>(true) {
    @Override
    public int getIcon(PopMenu dialog, int index, String menuText) {
        switch (index) {
            case 0:
                return R.mipmap.img_dialogx_demo_add;
            case 1:
                return R.mipmap.img_dialogx_demo_edit;
            case 2:
                return R.mipmap.img_dialogx_demo_delete;
            case 3:
                return R.mipmap.img_dialogx_demo_share;
            default:
                return 0;
        }
    }
});

显示一个 PopMenu,并使它依附于一个 View 展开

PopMenu.show(view, new String[]{"选项1", "选项2", "选项3"})
    .setOverlayBaseView(true);

要调整依附位置,请参考下图

简单提示 PopTip

范例代码:

PopMenu.show(view, new String[]{"选项1", "选项2", "选项3"})
        .setOverlayBaseView(false)
        .setAlignGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL);

点击菜单回调

PopMenu.show(new String[]{"选项1", "选项2", "选项3"})
        .setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
            @Override
            public boolean onClick(PopMenu dialog, CharSequence text, int index) {
                btnSelectMenu.setText(text);
                return false;
            }
        });

生命周期回调

想要监控对话框的生命周期,可以实现其 .setDialogLifecycleCallback(...) 接口,建议使用build()方法构建对话框:

PopMenu.build()
        .setMenuList(new String[]{"选项1", "选项2", "选项3"})
        .setDialogLifecycleCallback(new DialogLifecycleCallback<PopMenu>() {
            @Override
            public void onShow(PopMenu dialog) {
                super.onShow(dialog);
            }
            
            @Override
            public void onDismiss(PopMenu dialog) {
                super.onDismiss(dialog);
            }
        })
        .show();

PopMenu 也支持 Lifecycle,你可以使用 .getLifecycle() 获取 Lifecycle 对象。

自定义布局

要实现在对话框中加入自定义布局,请先准备好自定义布局文件,然后使用以下方法构建:

PopMenu.build()
        .setCustomView(new OnBindView<PopMenu>(R.layout.layout_custom_view) {
            @Override
            public void onBind(PopMenu dialog, View v) {
                
            }
        })
        .setMenuList(new String[]{"选项1", "选项2", "选项3"})
        .show();

回调参数中,v 为您给定的布局文件的实例化组件,您可以通过 v.findViewById(resId)来实例化其他子布局组件,并在 onBind 方法中设置其功能和事件回调。

自定义进入和关闭动画

对 PopMenu 全局生效的的动画修改:

你可以通过静态属性直接修改全局 PopMenu 的动画:

//设置全局 PopTip入场动画时间
PopMenu.overrideEnterDuration = 1000;
//设置全局 PopTip出场动画时间
PopMenu.overrideExitDuration = 1000;

其他额外方法

//设置菜单内容(List<CharSequence>、String[]或CharSequence[])
.setMenuList(...)

//关闭对话框
.dismiss();

//设置菜单高度
.setHeight(int);

//设置菜单宽度
.setWidth(int);

//设置菜单文字样式
.setMenuTextInfo(TextInfo);

//是否允许超出屏幕显示
.setOffScreen(boolean);

//是否覆盖(依附)在绑定的 View 上
.setOverlayBaseView(boolean)

//获取对话框实例化对象,您可以通过此方法更深度的定制Dialog的功能
.getDialogImpl()

//获取自定义布局实例
.getCustomView()

//设置对话框圆角(会裁切内容显示)
.setRadius(float px)

额外组件

TextInfo

TextInfo 用于存储基础文本样式设置,其包含一系列属性和响应的 get/set 方法,例如方法解释如下:

属性 解释 默认值
fontSize 字号大小,值为-1时使用默认样式,单位:dp -1
gravity 对齐方式,值为-1时使用默认样式,取值可使用Gravity.CENTER等对齐方式 -1
fontColor 文字颜色,值为1时使用默认样式,取值可以用Color.rgb(r,g,b)等方式获取 1
bold 是否粗体 false

请注意,fontColor 为 ColorInt 值,您可以使用 Color.parseColor("#4D000000") 设置一个 HEX 色值,或使用资源 getResources().getColor(R.color.black30) 设置一个颜色的资源值,请勿直接传入资源 ID,它可能会无效。

单独指定样式

若你的 App 引入了多种主题,在特定场景下需要使对话框显示为某种非全局的主体样式,可使用 .build() 构建对话框,然后使用 .setStyle(style) 来指定主题样式,在最后执行 .show() 命令显示对话框,例如:

PopMenu.build()
        //或直接使用 .build(IOSStyle.style())
        .setStyle(IOSStyle.style())
        .setMenuList(new String[]{"Menu 1", "Menu 2", "Menu 3"})
        .show();
Clone this wiki locally