DialogFragment学习笔记

本文介绍了Android中的DialogFragment,它是从3.0版本开始引入的,用于替代Dialog和AlertDialog。DialogFragment具备更好的生命周期管理及复用性。文章详细讲解了如何通过onCreateView和onCreateDialog方法创建Dialog,包括自定义布局、处理边距、处理点击事件、解决屏幕旋转后监听失效问题等实战技巧,并提供了相关参考资料。
摘要由CSDN通过智能技术生成

DialogFragment是Android3.0之后引入的一种特殊的Fragment,官方建议使用DialogFragment代替Dialog或者AllertDialog来实现弹框的功能,因为它可以更好的管理Dialog的生命周期以及可以更好复用。

使用DialogFragment至少需要实现onCreateView或者onCreateDialog方法。 onCreateView是使用定义的xml布局文件展示Dialog。onCreateDialog是利用AlertDialog或者Dialog创建出Dialog。不过google不推荐直接使用Dialog,我们就使用AlertDialog来创建。

1.实现onCreateView()方法,实现dialog

a.修改dialog的左右边距,使用window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));去除默认边距

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        Dialog dialog = getDialog();
        Window window = dialog.getWindow();
        if (window != null) {
            //去除系统自带的margin
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            //设置dialog在界面中的属性
            window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
        }
    }

b.系统的返回键或点击dialog旁边的位置,dialog都不消失

        //点击旁边位置,dialog不消失
        dialog.setCanceledOnTouchOutside(false);
        //按系统返回键,dialog不消失
        dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                return keyCode == KeyEvent.KEYCODE_BACK;
            }
        });

c.DialogFragment和Activity/Fragment通信:使用监听

permission_dialog_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#fff"/>
    <corners
        android:radius="14dp"/>
</shape>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:tools="http://schemas.android.com/tools">

    <RelativeLayout
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值