android如何实现弹窗在全屏中央并且实现在悬浮窗之下以及弹窗在新弹出的弹窗之下
时间: 2024-03-31 22:33:56 浏览: 25
要实现在全屏中央显示弹窗,可以先设置弹窗的宽度和高度为 `MATCH_PARENT`,然后将弹窗的重心设置为 `CENTER`,这样就可以将弹窗居中显示。具体的代码可以参考以下示例:
```
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.dialog_layout);
Window window = dialog.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
window.setGravity(Gravity.CENTER);
dialog.show();
```
要实现在悬浮窗之下显示弹窗,可以设置弹窗的窗口类型为 `TYPE_SYSTEM_OVERLAY`,这样就可以将弹窗显示在所有应用程序窗口之上,但是仍然位于系统级悬浮窗之下。具体的代码可以参考以下示例:
```
Dialog dialog = new Dialog(context, android.R.style.Theme_Translucent_NoTitleBar);
dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);
dialog.setContentView(R.layout.dialog_layout);
WindowManager.LayoutParams layoutParams = dialog.getWindow().getAttributes();
layoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.gravity = Gravity.CENTER;
dialog.getWindow().setAttributes(layoutParams);
dialog.show();
```
要实现在新弹出的弹窗之下显示弹窗,可以使用 `DialogFragment` 实现嵌套弹窗。具体的代码可以参考以下示例:
```
public class NestedDialogFragment extends DialogFragment {
private static final String TAG = "NestedDialogFragment";
private Dialog mNestedDialog;
public static NestedDialogFragment newInstance() {
return new NestedDialogFragment();
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(DialogFragment.STYLE_NO_FRAME, android.R.style.Theme_Holo_Light_Dialog_NoActionBar);
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
mNestedDialog = new Dialog(requireContext(), android.R.style.Theme_Holo_Light_Dialog_NoActionBar);
mNestedDialog.setContentView(R.layout.nested_dialog_layout);
Window window = mNestedDialog.getWindow();
WindowManager.LayoutParams layoutParams = window.getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
layoutParams.gravity = Gravity.BOTTOM;
window.setAttributes(layoutParams);
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
return mNestedDialog;
}
@Override
public void onStart() {
super.onStart();
if (mNestedDialog != null) {
mNestedDialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
}
}
}
```
在嵌套的 `DialogFragment` 中使用 `Dialog` 显示嵌套的弹窗,然后将嵌套弹窗的重心设置为 `BOTTOM`,这样就可以将嵌套弹窗显示在原来的弹窗之下。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)