Android 自定义弹出对话框AlertDialog
Android 自定义弹出对话框AlertDialog
简介
【Android 自定义弹出对话框AlertDialog】这是一个基于Dialog类封装的弹出确认框样式。
效果图:
文章图片
快速开始
- 在res/drawable目录下新建弹框样式文件 my_dialog_style.xml。
- 在res/values目录的styles.xml文件中自定义弹框的样式。
- @android:color/transparent
- true
- true
- 在res/layout目录下新建弹框布局文件 my_dialog.xml,将布局文件的背景设置为第一步定义的样式。
android:background="@drawable/my_dialog_style"
- 自定义弹框类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);
}
}
- 自定义弹框的使用。
- 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();
}
}
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- SpringBoot调用公共模块的自定义注解失效的解决
- python自定义封装带颜色的logging模块
- 列出所有自定义的function和view
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库