Android 自定义弹出对话框AlertDialog

Android 自定义弹出对话框AlertDialog 简介
【Android 自定义弹出对话框AlertDialog】这是一个基于Dialog类封装的弹出确认框样式。
效果图:
Android 自定义弹出对话框AlertDialog
文章图片

快速开始

  1. 在res/drawable目录下新建弹框样式文件 my_dialog_style.xml。

  1. 在res/values目录的styles.xml文件中自定义弹框的样式。
@android:color/transparenttruetrue

  1. 在res/layout目录下新建弹框布局文件 my_dialog.xml,将布局文件的背景设置为第一步定义的样式。
android:background="@drawable/my_dialog_style"

  1. 自定义弹框类MyDialog,继承Dialog类。
public class MyDialog extends Dialog implements View.OnClickListener {private TextView mTitle, mContent; private TextView mConfirm, mCancel; private Context mContext; private String content; private OncloseListener listener; private String positiveName; private String negativeName; private String title; public MyDialog(Context context) { super(context); this.mContext = context; }public MyDialog(@NonNull Context context, int themeResId, String content) { super(context, themeResId); this.mContext = context; this.content = content; }public MyDialog(@NonNull Context context, int themeResId, OncloseListener listener) { super(context, themeResId); this.mContext = context; this.listener = listener; }public MyDialog(@NonNull Context context, int themeResId, String content, OncloseListener listener) { super(context, themeResId); this.mContext = context; this.content = content; this.listener = listener; }protected MyDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) { super(context, cancelable, cancelListener); this.mContext = context; }/** * 设置弹框标题 * @param title 标题内容 * @return */ public MyDialog setTitle(String title) { this.title = title; return this; }/** * 设置弹框的提示内容 * @param content 弹框的提示内容 * @return */ public MyDialog setContent(String content) { this.content = content; return this; }/** * 设置弹框确认键的内容 * @param name 确认键显示内容 * @return */ public MyDialog setPositiveButton(String name) { this.positiveName = name; return this; }/** * 设置弹框取消键的内容 * @param name 取消键显示内容 * @return */ public MyDialog setNegativeButton(String name) { this.negativeName = name; return this; }@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.my_dialog); setCanceledOnTouchOutside(false); mTitle = findViewById(R.id.dialog_title); mContent = findViewById(R.id.dialog_content); mConfirm = findViewById(R.id.confirm); mCancel = findViewById(R.id.cancel); mConfirm.setOnClickListener(this); mCancel.setOnClickListener(this); }@Override public void onClick(View v) { switch (v.getId()) { case R.id.confirm: if (listener != null) { listener.onClick(true); } this.dismiss(); break; case R.id.cancel: if (listener != null) { listener.onClick(false); } this.dismiss(); break; } }public interface OncloseListener { void onClick(boolean confirm); } }

  1. 自定义弹框的使用。
1)界面布局文件res/layout/activity_test.xml

  1. TestActivity.java中使用。
public class TestActivity extends AppCompatActivity {private TextView restoreDefaults; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_test); restoreDefaults = findViewById(R.id.restore_defaults); restoreDefaults.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDialog(); } }); }/** * 显示对话框 */ private void showDialog() { MyDialog dialog = new MyDialog(TestActivity.this, R.style.mdialog, new MyDialog.OncloseListener() { @Override public void onClick(boolean confirm) { if (confirm) { // TODO: } else { // TODO: } } }); dialog.show(); } }

    推荐阅读