-
Notifications
You must be signed in to change notification settings - Fork 215
上下文菜单 PopMenu
Kongzue edited this page Dec 1, 2022
·
21 revisions
提供一个轻量化的菜单,可以附着于一个 View 展开,或者在屏幕中央直接显示,用于实现简单选择。
也可以使用 其他主题 以丰富菜单的样式:
PopMenu.show(new String[]{"添加", "编辑", "删除", "分享"});
也可以使用 List<CharSequence>
来设置菜单内容。
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.show(view, new String[]{"选项1", "选项2", "选项3"})
.setOverlayBaseView(true);
范例代码:
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 的动画:
//设置全局 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 用于存储基础文本样式设置,其包含一系列属性和响应的 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();