Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
一、设置 Window 属性
1、Dialog
- custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /><android.widget.Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_weight="1"android:text="cancel"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
2、Test
Dialog dialog = new Dialog(this);dialog.setContentView(R.layout.custom_dialog);TextView tvTitle = dialog.findViewById(R.id.tv_title);
TextView tvMessage = dialog.findViewById(R.id.tv_message);
Button btnConfirm = dialog.findViewById(R.id.btn_confirm);
Button btnCancel = dialog.findViewById(R.id.btn_cancel);
tvTitle.setText("系统提示");
tvMessage.setText("确定退出吗?");
btnConfirm.setOnClickListener(v -> {Toast.makeText(this, "点击了确定", Toast.LENGTH_SHORT).show();dialog.dismiss();
});
btnCancel.setOnClickListener(v -> {Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show();dialog.dismiss();
});Window window = dialog.getWindow();
if (window != null) {window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}dialog.show();
- 另一种设置 Window 属性的方式
Dialog dialog = new Dialog(this);dialog.setContentView(R.layout.custom_dialog);TextView tvTitle = dialog.findViewById(R.id.tv_title);
TextView tvMessage = dialog.findViewById(R.id.tv_message);
Button btnConfirm = dialog.findViewById(R.id.btn_confirm);
Button btnCancel = dialog.findViewById(R.id.btn_cancel);
tvTitle.setText("系统提示");
tvMessage.setText("确定退出吗?");
btnConfirm.setOnClickListener(v -> {Toast.makeText(this, "点击了确定", Toast.LENGTH_SHORT).show();dialog.dismiss();
});
btnCancel.setOnClickListener(v -> {Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show();dialog.dismiss();
});Window window = dialog.getWindow();
if (window != null) {WindowManager.LayoutParams params = window.getAttributes();params.width = WindowManager.LayoutParams.MATCH_PARENT;params.height = WindowManager.LayoutParams.MATCH_PARENT;window.setAttributes(params);
}dialog.show();
<style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog"><item name="android:windowFullscreen">true</item><item name="android:windowIsFloating">false</item>
</style>
二、使用自定义样式
1、Style
- res/values/styles.xml
<style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog"><item name="android:windowFullscreen">true</item><item name="android:windowIsFloating">false</item>
</style>
-
windowFullscreen 设置为 true 强制 Dialog 进入全屏模式
-
windowIsFloating 设置为 false 告诉系统这个 Dialog 不悬浮,可以占据整个屏幕
2、Dialog
- custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /><android.widget.Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_weight="1"android:text="cancel"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
3、Test
Dialog dialog = new Dialog(this, R.style.FullScreenDialog);dialog.setContentView(R.layout.custom_dialog);TextView tvTitle = dialog.findViewById(R.id.tv_title);
TextView tvMessage = dialog.findViewById(R.id.tv_message);
Button btnConfirm = dialog.findViewById(R.id.btn_confirm);
Button btnCancel = dialog.findViewById(R.id.btn_cancel);
tvTitle.setText("系统提示");
tvMessage.setText("确定退出吗?");
btnConfirm.setOnClickListener(v -> {Toast.makeText(this, "点击了确定", Toast.LENGTH_SHORT).show();dialog.dismiss();
});
btnCancel.setOnClickListener(v -> {Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show();dialog.dismiss();
});dialog.show();
三、继承 DialogFragment 实现
1、Dialog
- custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /><android.widget.Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_weight="1"android:text="cancel"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
- FullScreenDialogFragment.java
public class FullScreenDialogFragment extends DialogFragment {private FragmentActivity fragmentActivity;private TextView tvTitle;private TextView tvMessage;private Button btnConfirm;private Button btnCancel;private String titleStr;private String messageStr;private String confirmStr;private String cancelStr;private OnConfirmClickObserver onConfirmClickObserver;private OnCancelClickObserver onCancelClickObserver;public FullScreenDialogFragment(FragmentActivity fragmentActivity,String titleStr,String messageStr,String confirmStr,String cancelStr,OnConfirmClickObserver onConfirmClickObserver,OnCancelClickObserver onCancelClickObserver) {this.fragmentActivity = fragmentActivity;this.titleStr = titleStr;this.messageStr = messageStr;this.confirmStr = confirmStr;this.cancelStr = cancelStr;this.onConfirmClickObserver = onConfirmClickObserver;this.onCancelClickObserver = onCancelClickObserver;}@Nullable@Overridepublic View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {View view = inflater.inflate(R.layout.custom_dialog, container, false);tvTitle = view.findViewById(R.id.tv_title);tvMessage = view.findViewById(R.id.tv_message);btnConfirm = view.findViewById(R.id.btn_confirm);btnCancel = view.findViewById(R.id.btn_cancel);tvTitle.setText(titleStr);tvMessage.setText(messageStr);btnConfirm.setText(confirmStr);btnCancel.setText(cancelStr);btnConfirm.setOnClickListener(v -> {if (onConfirmClickObserver != null) onConfirmClickObserver.confirm();dismiss();});btnCancel.setOnClickListener(v -> {if (onCancelClickObserver != null) onCancelClickObserver.cancel();dismiss();});return view;}@Overridepublic void onStart() {super.onStart();Dialog dialog = getDialog();if (dialog == null) return;Window window = dialog.getWindow();if (window == null) return;window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);}public void show() {super.show(fragmentActivity.getSupportFragmentManager(), "");}
}
2、Test
FullScreenDialogFragment dialogFragment = new FullScreenDialogFragment(this,"系统提示","确定退出吗?","确定","取消",() -> {Toast.makeText(this, "点击了确定", Toast.LENGTH_SHORT).show();},() -> {Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show();});dialogFragment.show();
四、继承 Dialog 实现
1、Dialog
- custom_dialog.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"android:paddingStart="20dp"android:paddingTop="40dp"android:paddingEnd="20dp"android:paddingBottom="40dp"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="title"android:textSize="25dp" /><TextViewandroid:id="@+id/tv_message"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"android:gravity="center"android:text="message"android:textSize="20dp" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="20dp"><android.widget.Buttonandroid:id="@+id/btn_confirm"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginRight="5dp"android:layout_weight="1"android:text="confirm"android:textColor="@color/black" /><android.widget.Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_marginLeft="5dp"android:layout_weight="1"android:text="cancel"android:textColor="@color/black" /></LinearLayout>
</LinearLayout>
- FullScreenDialog.java
public class FullScreenDialog extends Dialog {private TextView tvTitle;private TextView tvMessage;private Button btnConfirm;private Button btnCancel;private String titleStr;private String messageStr;private String confirmStr;private String cancelStr;private OnConfirmClickObserver onConfirmClickObserver;private OnCancelClickObserver onCancelClickObserver;public FullScreenDialog(@NonNull Context context) {super(context);}@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.custom_dialog);tvTitle = findViewById(R.id.tv_title);tvMessage = findViewById(R.id.tv_message);btnConfirm = findViewById(R.id.btn_confirm);btnCancel = findViewById(R.id.btn_cancel);tvTitle.setText(titleStr);tvMessage.setText(messageStr);btnConfirm.setText(confirmStr);btnCancel.setText(cancelStr);btnConfirm.setOnClickListener(view -> {if (onConfirmClickObserver != null) onConfirmClickObserver.confirm();dismiss();});btnCancel.setOnClickListener(view -> {if (onCancelClickObserver != null) onCancelClickObserver.cancel();dismiss();});Window window = getWindow();if (window == null) return;window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);}public void setTitle(String str) {this.titleStr = str == null ? "" : str;}public void setMessage(String str) {this.messageStr = str == null ? "" : str;}public void setConfirm(String str, OnConfirmClickObserver onConfirmClickObserver) {this.confirmStr = str == null ? "" : str;this.onConfirmClickObserver = onConfirmClickObserver;}public void setCancel(String str, OnCancelClickObserver onCancelClickObserver) {this.cancelStr = str == null ? "" : str;this.onCancelClickObserver = onCancelClickObserver;}
}
2、Test
FullScreenDialog fullScreenDialog = new FullScreenDialog(this);fullScreenDialog.setTitle("系统提示");
fullScreenDialog.setMessage("确定退出吗?");
fullScreenDialog.setConfirm("确定", () -> {Toast.makeText(this, "点击了确定", Toast.LENGTH_SHORT).show();
});
fullScreenDialog.setCancel("取消", () -> {Toast.makeText(this, "点击了取消", Toast.LENGTH_SHORT).show();
});fullScreenDialog.show();