在使用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的背景为透明,否则设置宽度的代码会无效
网友评论