Skip to content

全屏对话框 FullScreenDialog

Kongzue edited this page Sep 7, 2022 · 22 revisions

全屏对话框 FullScreenDialog

全屏对话框 FullScreenDialog

全屏对话框 FullScreenDialog 提供从底部弹出的对话框效果,类似 BottomDialog 但相比 BottomDialog 的定制化自由度更高。全屏对话框 FullScreenDialog 将不提供任何基础实现,开发者可以自定义实现布局。默认只提供一个默认的下划关闭逻辑和 Activity 背景下沉的显示效果。

显示一个全屏对话框

先准备好一个布局文件,然后使用以下代码显示一个全屏对话框:

FullScreenDialog.show(new OnBindView<FullScreenDialog>(R.layout.layout_full_screen) {
    @Override
    public void onBind(FullScreenDialog dialog, View v) {
        //View childView = v.findViewById(resId)...
    }
});

请注意,DialogX 的全屏对话框不自带标题、正文内容和按钮布局,如果需要请在自己的布局中进行实现。

全屏对话框默认支持下滑关闭手势,当对话框的 cancelable 被设置为 false 时下滑无法关闭。

生命周期回调

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

FullScreenDialog.build()
        .setDialogLifecycleCallback(new DialogLifecycleCallback<FullScreenDialog>() {
            @Override
            public void onShow(FullScreenDialog dialog) {
                //对话框启动时回调
            }
            @Override
            public void onDismiss(FullScreenDialog dialog) {
                //对话框关闭时回调
            }
        })
        .show();

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

其他额外方法

//强制重新刷新界面
.refreshUI();

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

//是否允许点击外部区域或返回键关闭
.setCancelable(boolean);
    
//设置返回按键回调
.setOnBackPressedListener(OnBackPressedListener);

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

//获取自定义布局实例
.getCustomView()
    
//设置背景颜色,强行对对话框背景进行染色,请注意参数为int类型的颜色值而非R.color的索引
.setBackgroundColor(ColorInt);

//设置对话框圆角(会裁切内容显示,此设置在 FullScreenDialog 中只影响左上、右上两个角的圆角)
.setRadius(float px)

//隐藏对话框(无动画),恢复显示请执行非静态方法的 .show()
.hide();

//隐藏对话框(模拟关闭对话框的动画),恢复显示请执行非静态方法的 .show()
.hideWithExitAnim();

背景遮罩

FullScreenDialog 支持修改背景遮罩,这是为了丰富扩展性。如果需要背景遮罩,您可以自行使用如下代码设置:

fullScreenDialog.setMaskColor(colorInt);

请注意,传入参数为 ColorInt 值,您可以使用 Color.parseColor("#4D000000") 设置一个 HEX 色值,或使用 getResources().getColor(R.color.black30) 设置一个颜色的资源值。

减少卡顿(实验性)

FullScreenDialog 对话框实现背景下沉的原理是对当前显示的界面进行截图并对截图进行缩放,此时界面理论上可以不再进行渲染,您可以通过以下代码启用在 FullScreenDialog 启动时隐藏并阻止当前 Activity 界面进行重测量和渲染,这样有助于在 FullScreenDialog 使用复杂布局时减少卡顿现象:

ActivityScreenShotImageView.hideContentView = true;

在关闭对话框时界面将恢复显示和渲染。

Clone this wiki locally