20210603
大屏設備使用DialogFragment時出現(xiàn)了對話框大小差別很大的情況,需要做一些固定大小的限制毡惜,
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;
}
}