Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)

一、设置 Window 属性

1、Dialog
  • custom_dialog.xml
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">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="title"
        android:textSize="25dp" />

    <TextView
        android: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" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <android.widget.Button
            android: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.Button
            android: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
java 复制代码
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 属性的方式
java 复制代码
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();
xml 复制代码
<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
xml 复制代码
<style name="FullScreenDialog" parent="Theme.AppCompat.Light.Dialog">
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowIsFloating">false</item>
</style>
  1. windowFullscreen 设置为 true 强制 Dialog 进入全屏模式

  2. windowIsFloating 设置为 false 告诉系统这个 Dialog 不悬浮,可以占据整个屏幕

2、Dialog
  • custom_dialog.xml
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">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="title"
        android:textSize="25dp" />

    <TextView
        android: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" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <android.widget.Button
            android: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.Button
            android: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
java 复制代码
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 复制代码
<?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">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="title"
        android:textSize="25dp" />

    <TextView
        android: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" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <android.widget.Button
            android: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.Button
            android: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
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
    @Override
    public 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;
    }

    @Override
    public 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
java 复制代码
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 复制代码
<?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">

    <TextView
        android:id="@+id/tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="title"
        android:textSize="25dp" />

    <TextView
        android: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" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp">

        <android.widget.Button
            android: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.Button
            android: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
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);
    }

    @Override
    protected 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
java 复制代码
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();
相关推荐
叶落阁主4 分钟前
Spring Boot 4 实战:Jackson 2.x 升级到 3.x 踩坑全记录
java·后端·架构
布吉岛的石头4 分钟前
Java 中高级面试:JVM 内存模型 + GC 算法高频题总结
java·jvm·面试
2301_7926748624 分钟前
java学习(day32)
java
摇滚侠28 分钟前
Oracle19c 导出 Oracle11g 导入,Oracle19c 导出导入,Oracle11g 导出导入
java·数据库·oracle
a8a30229 分钟前
Laravel 6.x新特性全解析
android
Stella Blog35 分钟前
狂神Java基础学习笔记Day05
java·笔记·学习
曹牧36 分钟前
Spring WebService 的两种主流实现方式‌
java·后端·spring
pqq的迷弟40 分钟前
面试整理:HashMap\ConcurrentHashMap原来
java·面试·职场和发展
夕除43 分钟前
javaweb--16
java·状态模式
用户游民44 分钟前
Android 腾讯X5WebView如何禁止系统自带剪切板和自定义剪切板视图
android·java