Android 调整Dialog或DialogFragment的宽度

在使用Dialog或者DialogFragment时,难免需要调整Dialog的宽度,要实现该需求,需要做一下步骤:

(1)在Dialog中使用

在Dialog中使用,需要在Dialog初始化时,加入如下代码:

        ...
         // 隐藏标题栏, 不加弹窗上方会一个透明的标题栏占着空间
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

        // 必须设置这两个,才能设置宽度
        dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        dialog.getWindow().getDecorView().setBackgroundColor(Color.TRANSPARENT);

        // 遮罩层透明度
        dialog.getWindow().setDimAmount(0);

        // 设置宽度
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
        params.windowAnimations = R.style.bottomSheet_animation;
        dialog.getWindow().setAttributes(params);
       
        // 设置dialog布局内容,这里布局的初始化代码就不写出来了
        dialog.setContentView(view, layoutParams)
        dialog.show()

在DialogFragment中,则在onCreateView函数中,加入上述代码:


    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable           Bundle savedInstanceState) {
        ...
         // 隐藏标题栏, 不加弹窗上方会一个透明的标题栏占着空间
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);

       // 必须设置这两个,才能设置宽度
        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        getDialog().getWindow().getDecorView().setBackgroundColor(Color.TRANSPARENT);

        // 遮罩层透明度
        getDialog().getWindow().setDimAmount(0);

        // 设置宽度
        WindowManager.LayoutParams params = window.getAttributes();
        params.width = WindowManager.LayoutParams.MATCH_PARENT;
        params.height = WindowManager.LayoutParams.WRAP_CONTENT;
        params.gravity = Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL;
        params.windowAnimations = R.style.bottomSheet_animation;
        getDialog().getWindow().setAttributes(params);
        return view;
    }

注意必须设置Dialog的背景为透明,否则设置宽度的代码会无效

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容