在使用Dialog或者DialogFragment時,難免需要調(diào)整Dialog的寬度,要實現(xiàn)該需求,需要做一下步驟:
(1)在Dialog中使用
在Dialog中使用,需要在Dialog初始化時,加入如下代碼:
...
// 隱藏標(biāo)題欄, 不加彈窗上方會一個透明的標(biāo)題欄占著空間
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
// 必須設(shè)置這兩個,才能設(shè)置寬度
dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
dialog.getWindow().getDecorView().setBackgroundColor(Color.TRANSPARENT);
// 遮罩層透明度
dialog.getWindow().setDimAmount(0);
// 設(shè)置寬度
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);
// 設(shè)置dialog布局內(nèi)容,這里布局的初始化代碼就不寫出來了
dialog.setContentView(view, layoutParams)
dialog.show()
在DialogFragment中,則在onCreateView函數(shù)中,加入上述代碼:
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
...
// 隱藏標(biāo)題欄, 不加彈窗上方會一個透明的標(biāo)題欄占著空間
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
// 必須設(shè)置這兩個,才能設(shè)置寬度
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
getDialog().getWindow().getDecorView().setBackgroundColor(Color.TRANSPARENT);
// 遮罩層透明度
getDialog().getWindow().setDimAmount(0);
// 設(shè)置寬度
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;
}
注意必須設(shè)置Dialog的背景為透明,否則設(shè)置寬度的代碼會無效