美文网首页
修改DialogFragment的大小

修改DialogFragment的大小

作者: 100个大西瓜 | 来源:发表于2021-06-16 19:29 被阅读0次

20210603
大屏设备使用DialogFragment时出现了对话框大小差别很大的情况,需要做一些固定大小的限制,
DialogFragment的源码中,有个mDialog对象,就是对话框,整个DialogFragment.java代码中只有onStart()方法调用了mDialog.show()的方法,因此如果需要对它的大小进行修改,那么应该是重写DialogFragment的onStart(),
假如想固定Dialog的长宽都是整个屏幕大小的60%,那么就可以进行以下操作:

1.获取整个屏幕的大小

public class PickerDialogFragment extends DialogFragment {
    private Point getScreenSize() {
        final Point size = new Point();
        final FragmentActivity activity = requireActivity();
        final WindowManager windowManager = activity.getWindowManager();
        final Display display = windowManager.getDefaultDisplay();
        display.getSize(size);
        return size;
    }
}

其中point.x 就是屏幕的宽度,point.y 就是屏幕的高度

2.设置dialog的大小
设置dialog大小只能在它显示show后,设置dialog所在的window的属性,才能生效
(之后调用show之后,才有对应的Window对象)

final Dialog dialog = getDialog();
if (dialog == null) {
    return;
}
final Window window = dialog.getWindow();
if (window == null) {
    return;
}
final Point size = getScreenSize();
final WindowManager.LayoutParams attributes = window.getAttributes();
attributes.height = (int) (size.y * 0.6);
attributes.width = (int) (size.x * 0.6);
window.setAttributes(attributes);

全部代码就是:

package com.hello.world;

import android.app.Dialog;
import android.graphics.Point;
import android.view.Display;
import android.view.Window;
import android.view.WindowManager;

import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.FragmentActivity;

public class PickerDialogFragment extends DialogFragment {

    @Override
    public void onStart() {
        super.onStart();
        final Dialog dialog = getDialog();
        if (dialog == null) {
            return;
        }
        final Window window = dialog.getWindow();
        if (window == null) {
            return;
        }
        final Point size = getScreenSize();
        final WindowManager.LayoutParams attributes = window.getAttributes();
        attributes.height = (int) (size.y * 0.6);
        attributes.width = (int) (size.x * 0.6);
        window.setAttributes(attributes);
    }

    private Point getScreenSize() {
        final Point size = new Point();
        final FragmentActivity activity = requireActivity();
        final WindowManager windowManager = activity.getWindowManager();
        final Display display = windowManager.getDefaultDisplay();
        display.getSize(size);
        return size;
    }

}

相关文章

网友评论

      本文标题:修改DialogFragment的大小

      本文链接:https://www.haomeiwen.com/subject/wrfteltx.html