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;
}
}
网友评论