android DialogFragment 的window设置margin的完整例子
时间: 2024-02-22 20:00:42 浏览: 258
好的,下面是一个完整的例子:
```java
public class CustomDialogFragment extends DialogFragment {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title")
.setMessage("Message")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do something
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// do something
}
});
AlertDialog dialog = builder.create();
// 设置 Dialog 的 margin
Window window = dialog.getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.gravity = Gravity.CENTER;
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.x = getResources().getDimensionPixelSize(R.dimen.dialog_margin_horizontal);
layoutParams.y = getResources().getDimensionPixelSize(R.dimen.dialog_margin_vertical);
window.setAttributes(layoutParams);
return dialog;
}
}
```
在这个例子中,我们创建了一个名为 `CustomDialogFragment` 的自定义对话框。在对话框的 `onCreateDialog` 方法中,我们创建了一个 `AlertDialog.Builder` 对象,并设置了对话框的标题、消息和按钮。然后,我们通过 `builder.create()` 方法创建了一个 `AlertDialog` 对象,并将其返回。
接着,我们获取了对话框的 `Window` 对象,并通过 `window.getAttributes()` 方法获取到对话框的布局参数,即 `WindowManager.LayoutParams` 对象。我们在这个对象中设置了对话框的位置、宽度、高度以及 margin 值。最后,我们通过 `window.setAttributes()` 方法将这些布局参数应用到对话框中。
需要注意的是,在设置 margin 值时,我们使用了资源文件 `R.dimen.dialog_margin_horizontal` 和 `R.dimen.dialog_margin_vertical`。这两个资源文件分别定义了对话框的水平和垂直 margin 值,可以在 `res/values/dimens.xml` 文件中定义,例如:
```xml
<resources>
<dimen name="dialog_margin_horizontal">16dp</dimen>
<dimen name="dialog_margin_vertical">16dp</dimen>
</resources>
```
这样,我们就完成了对话框的创建和 margin 值的设置。
阅读全文