Android 开发一个自定义对话框,其界面中显示标题、提示内容、确定和取消按钮,当点击回退键时,用于提示用户是否退出应用。
时间: 2023-05-30 18:08:01 浏览: 550
自定义对话框的实现
以下是一个示例代码,实现了一个自定义对话框,包括标题、提示内容、确定和取消按钮,并在按下回退键时提示用户是否退出应用。
首先,在 res/layout 文件夹下创建一个 XML 布局文件,命名为 custom_dialog.xml,如下所示:
```
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold" />
<TextView
android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:lineSpacingMultiplier="1.2"
android:textSize="16sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:orientation="horizontal">
<Button
android:id="@+id/positive_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="确定" />
<Button
android:id="@+id/negative_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_weight="1"
android:text="取消" />
</LinearLayout>
</LinearLayout>
```
这个布局中包含了一个垂直排列的 LinearLayout,其中包括一个 TextView 用于显示标题,一个 TextView 用于显示提示内容,以及一个水平排列的 LinearLayout,其中包括一个确定按钮和一个取消按钮。
接下来,在 Java 代码中,创建一个继承自 DialogFragment 的类 CustomDialog,实现自定义对话框的逻辑,如下所示:
```
public class CustomDialog extends DialogFragment {
private String mTitle;
private String mMessage;
private DialogInterface.OnClickListener mPositiveListener;
private DialogInterface.OnClickListener mNegativeListener;
public CustomDialog(String title, String message, DialogInterface.OnClickListener positiveListener,
DialogInterface.OnClickListener negativeListener) {
mTitle = title;
mMessage = message;
mPositiveListener = positiveListener;
mNegativeListener = negativeListener;
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = requireActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.custom_dialog, null);
TextView titleView = view.findViewById(R.id.title);
titleView.setText(mTitle);
TextView messageView = view.findViewById(R.id.message);
messageView.setText(mMessage);
Button positiveButton = view.findViewById(R.id.positive_button);
positiveButton.setOnClickListener(v -> {
dismiss();
mPositiveListener.onClick(getDialog(), DialogInterface.BUTTON_POSITIVE);
});
Button negativeButton = view.findViewById(R.id.negative_button);
negativeButton.setOnClickListener(v -> {
dismiss();
mNegativeListener.onClick(getDialog(), DialogInterface.BUTTON_NEGATIVE);
});
builder.setView(view);
return builder.create();
}
@Override
public void onCancel(@NonNull DialogInterface dialog) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("确定要退出吗?")
.setPositiveButton("确定", (dialog1, which) -> {
getActivity().finish();
})
.setNegativeButton("取消", null)
.create()
.show();
}
}
```
这个类中包含了一个构造方法,用于传入标题、提示内容、确定按钮和取消按钮的点击监听器。在 onCreateDialog 方法中,首先使用 AlertDialog.Builder 创建一个对话框实例,然后使用 LayoutInflater 加载自定义布局 custom_dialog.xml,并将标题、提示内容、确定按钮和取消按钮的点击监听器设置进去。最后返回对话框实例。
在 onCancel 方法中,当用户按下回退键时,弹出一个提示对话框,询问用户是否退出应用。如果用户点击确定按钮,则调用 getActivity().finish() 关闭当前 Activity。
最后,在需要弹出自定义对话框的地方,调用 CustomDialog 的静态方法 newInstance 创建一个实例,并调用 show 方法显示对话框,如下所示:
```
CustomDialog.newInstance("提示", "确定要退出应用吗?", null, null)
.show(getSupportFragmentManager(), "CustomDialog");
```
这个示例中没有为确定按钮和取消按钮设置监听器,因此点击这两个按钮时不会有任何响应。如果需要在点击确定按钮或取消按钮时进行一些操作,只需要在创建 CustomDialog 实例时传入相应的监听器即可。
阅读全文