控制DialogFragment显示在界面底部

来源:互联网 发布:webpack node api 编辑:程序博客网 时间:2024/04/28 07:54

在使用DialogFragment时,如果不控制它的位置,它管理的Dialog将显示在当前界面的正中央。

例如,通常我们会这么使用DialogFragment:

private void showPermissionWarningDialog() {    //mWarningPermissionFragment继承DialogFragment    if (mWarningPermissionFragment == null) {        mWarningPermissionFragment = PermissionWarningFragment.newInstance();        mWarningPermissionFragment.setCancelable(false);        //FragmentManager将负责显示DialogFragment                mWarningPermissionFragment.show(getFragmentManager(), DIALOG_TAG);    }}

如果不进行其它操作,mWarningPermissionFragment的dialog将显示在界面的正中央。

现在我们想让DialogFragment对应的dialog显示在整个界面的底部。
一种可行的方法是:
在DialogFragment对应的视图创建出来后显示出来前,更改其位置属性。

我们知道DialogFragment对应的生存周期为:

03-03 13:25:14.246 25266-25266/stark.a.is.zhang.transfer D/ZJTest: onAttach03-03 13:25:14.246 25266-25266/stark.a.is.zhang.transfer D/ZJTest: onCreate03-03 13:25:14.246 25266-25266/stark.a.is.zhang.transfer D/ZJTest: onCreateDialog03-03 13:25:14.246 25266-25266/stark.a.is.zhang.transfer D/ZJTest: onCreateView03-03 13:25:14.256 25266-25266/stark.a.is.zhang.transfer D/ZJTest: onStart...................

因此,比较适合修改位置属性的接口是onStart。
我们可以进行类似如下修改:

@Overridepublic void onStart() {    super.onStart();    //得到dialog对应的window    Window window = getDialog().getWindow();    if (window != null) {        //得到LayoutParams        WindowManager.LayoutParams params = window.getAttributes();        //修改gravity        params.gravity = Gravity.BOTTOM;        params.width = WindowManager.LayoutParams.MATCH_PARENT;        window.setAttributes(params);    }}

按照这种方式修改后,DialogFragment对应的dialog将显示在界面的底部。

0 0
原创粉丝点击