返回

用Android自定义Dialog对话框窗口,一次就够了的终极指南

Android

  1. 创建基本 Dialog 对话框窗口

在 Android 中,可以通过两种方式创建 Dialog 对话框窗口:

  • 使用 DialogFragment 类
  • 直接使用 Dialog 接口

使用 DialogFragment 类

DialogFragment 是 Android 提供的一个 Dialog 对话框窗口的封装类,它继承自 Fragment 类,因此您可以像使用 Fragment 一样使用它。

创建 DialogFragment 类只需要简单几步:

  1. 创建一个新的 Java 类,并将其命名为 MyDialogFragment。
  2. 让 MyDialogFragment 类继承自 DialogFragment 类。
  3. 在 MyDialogFragment 类中重写 onCreateDialog() 方法。
  4. 在 onCreateDialog() 方法中,使用 AlertDialog.Builder 类来构建一个 Dialog 对话框窗口。
  5. 使用 builder.create() 方法来创建 Dialog 对话框窗口。

以下是使用 DialogFragment 类创建 Dialog 对话框窗口的示例代码:

public class MyDialogFragment extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Title");
        builder.setMessage("Message");
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do something when the OK button is clicked
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do something when the Cancel button is clicked
            }
        });
        return builder.create();
    }
}

直接使用 Dialog 接口

您也可以直接使用 Dialog 接口来创建 Dialog 对话框窗口。

创建 Dialog 对话框窗口只需要简单几步:

  1. 创建一个新的 Java 类,并将其命名为 MyDialog。
  2. 让 MyDialog 类实现 Dialog 接口。
  3. 在 MyDialog 类中重写 onCreate() 方法。
  4. 在 onCreate() 方法中,使用 AlertDialog.Builder 类来构建一个 Dialog 对话框窗口。
  5. 使用 builder.create() 方法来创建 Dialog 对话框窗口。

以下是直接使用 Dialog 接口创建 Dialog 对话框窗口的示例代码:

public class MyDialog implements Dialog {

    private AlertDialog dialog;

    public MyDialog(Context context) {
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Title");
        builder.setMessage("Message");
        builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do something when the OK button is clicked
            }
        });
        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // Do something when the Cancel button is clicked
            }
        });
        dialog = builder.create();
    }

    @Override
    public void show() {
        dialog.show();
    }

    @Override
    public void dismiss() {
        dialog.dismiss();
    }

    @Override
    public boolean isShowing() {
        return dialog.isShowing();
    }

    @Override
    public Context getContext() {
        return dialog.getContext();
    }

    @Override
    public View findViewById(int id) {
        return dialog.findViewById(id);
    }

    @Override
    public Window getWindow() {
        return dialog.getWindow();
    }

    @Override
    public LayoutInflater getLayoutInflater() {
        return dialog.getLayoutInflater();
    }

    @Override
    public void addContentView(View view, ViewGroup.LayoutParams params) {
        dialog.addContentView(view, params);
    }

    @Override
    public void setTitle(CharSequence title) {
        dialog.setTitle(title);
    }

    @Override
    public void setTitle(int titleId) {
        dialog.setTitle(titleId);
    }

    @Override
    public void setMessage(CharSequence message) {
        dialog.setMessage(message);
    }

    @Override
    public void setMessage(int messageId) {
        dialog.setMessage(messageId);
    }

    @Override
    public void setContentView(View view) {
        dialog.setContentView(view);
    }

    @Override
    public void setContentView(int viewId) {
        dialog.setContentView(viewId);
    }

    @Override
    public void setCustomTitle(View view) {
        dialog.setCustomTitle(view);
    }

    @Override
    public void setCustomTitle(int viewId) {
        dialog.setCustomTitle(viewId);
    }

    @Override
    public void setView(View view) {
        dialog.setView(view);
    }

    @Override
    public void setView(View view, ViewGroup.LayoutParams params) {
        dialog.setView(view, params);
    }

    @Override
    public void setCancelable(boolean cancelable) {
        dialog.setCancelable(cancelable);
    }

    @Override
    public void setCanceledOnTouchOutside(boolean cancelable) {
        dialog.setCanceledOnTouchOutside(cancelable);
    }

    @Override
    public void setRequestFeature(int featureId) {
        dialog.setRequestFeature(featureId);
    }

    @Override
    public void setOnShowListener(OnShowListener listener) {
        dialog.setOnShowListener(listener);
    }

    @Override
    public void setOnDismissListener(OnDismissListener listener) {
        dialog.setOnDismissListener(listener);
    }

    @Override
    public void setOnCancelListener(OnCancelListener listener) {
        dialog.setOnCancelListener(listener);
    }

    @Override
    public void setOnKeyListener(OnKeyListener listener) {
        dialog.setOnKeyListener(listener);
    }
}

2. 为 Dialog 对话框窗口添加按钮和监听器

您可以为 Dialog 对话框窗口添加任意数量的按钮,并为每个按钮设置监听器。

要为 Dialog 对话框窗口添加按钮,请使用 AlertDialog.Builder 类的 setPositiveButton()、setNegativeButton() 和 setNeutralButton() 方法。

以下是为 Dialog 对话框窗口添加按钮的示例代码:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title");
builder.setMessage("Message");
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Do something when the OK button is clicked
    }
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Do something when the Cancel button is clicked
    }
});
builder.setNeutralButton("Neutral", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Do something when the Neutral button is clicked
    }
});

要为 Dialog 对话框窗口的按钮设置监听器,请使用 DialogInterface.OnClickListener 接口的 onClick() 方法。

以下是为 Dialog 对话框窗口的按钮设置监听器的示例代码:

builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // Do something when the OK button is clicked
    }
});

3. 自定义 Dialog 对话框窗口的样式和外观

您可以自定义 Dialog 对话框窗口的样式和外观,使其与应用程序的整体风格相一致。

要自定义 Dialog 对话框窗口的样式,请使用 AlertDialog.Builder 类的 setStyle() 方法。

以下是自定义 Dialog 对话框窗口样式的示例代码:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title");
builder.setMessage("Message");
builder.setStyle(AlertDialog.THEME_HOLO_LIGHT);

您还可以自定义 Dialog 对话框窗口的外观,使其更加符合您的应用程序的品牌。

要自定义 Dialog 对话框窗口的外观,请使用 AlertDialog.Builder 类的 setCustomTitle() 和 setView() 方法。

以下是自定义 Dialog 对话框窗口外观的示例代码:

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setTitle("Title");
builder.setMessage("Message");
builder.setCustomTitle(new View(getActivity()));
builder.setView(new View(getActivity()));

4. 总结

在本指南中,您学习了如何在 Android 应用程序中自定义 Dialog