一、设置 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>
-
windowFullscreen 设置为 true 强制 Dialog 进入全屏模式
-
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();