本文介绍最常用的四种对话框的使用方法,包括普通(包含提示消息和按钮)对话框、列表展示对话框、加载对话框、编辑对话框等多种形式。
一、前期准备1. 设置对话框背景 dialog_bg_normal.xml
2. 设置风格
@drawable/dialog_bg_normal
@android:style/Animation.Dialog
@null
true
true
true
true
3. 自定义对话框
/**
* Created on 2021/11/13 11:45
*
* @author Gong Youqiang
*/
public class CommonDialog extends Dialog {
private Window mWindow;
public CommonDialog(@NonNull Context context) {
super(context);
}
public CommonDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}
protected CommonDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
public void setView(View view) {
setContentView(view);
}
public void setView(int ID) {
setContentView(ID);
}
public void setProperty(int x,int y,int w,int h) {
mWindow = getWindow();
WindowManager.LayoutParams params = mWindow.getAttributes();
params.x = x; //设置对话框的位置,0为中间
params.y = y;
params.width = w;
params.height = h;
params.alpha = 1.0f; //设置对话框的透明度,1f不透明
params.gravity = Gravity.CENTER; //设置显示在中间
mWindow.setAttributes(params);
}
}
二、普通(包含提示消息和按钮)对话框
1. 效果图
2. 布局文件 dialog_device_add_notice.xml
3. 逻辑代码
private CommonDialog mDialog;
public void click(View view) {
showDialog();
}
private void showDialog() {
mDialog = new CommonDialog(this,R.style.customDialog);
View view = View.inflate(this, R.layout.dialog_device_add_notice,null);
final LinearLayout llBefore = (LinearLayout)view.findViewById(R.id.ll_before);
final LinearLayout llAfter = (LinearLayout)view.findViewById(R.id.ll_after);
final ImageView imgWaiting = (ImageView) view.findViewById(R.id.img_config_icon1);
TextView txtTitle = (TextView) view.findViewById(R.id.txt_title);
txtTitle.setText(getString(R.string.base_update_notice));
final TextView txtMsg = (TextView) view.findViewById(R.id.txt_msg);
TextView txtCancle = (TextView) view.findViewById(R.id.txt_cancle);
txtMsg.setText(getString(R.string.base_need_update));
txtMsg.setGravity(Gravity.CENTER);
txtCancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
TextView txtOk = (TextView) view.findViewById(R.id.txt_ok);
llBefore.setVisibility(View.VISIBLE);
llAfter.setVisibility(View.GONE);
txtOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//versionDialog.dismiss();
//updateVersion();
txtMsg.setText("正在搜索,请稍后...");
llBefore.setVisibility(View.GONE);
llAfter.setVisibility(View.VISIBLE);
AnimationDrawable animationDrawable = (AnimationDrawable) imgWaiting.getDrawable();
if(animationDrawable != null){
animationDrawable.start();
}
}
});
mDialog.setView(view);
mDialog.setProperty(0,0,800,600);
mDialog.setCanceledOnTouchOutside(true);
mDialog.show();
}
三、列表对话框
1. 布局文件 dialog_delete_edit.xml
2. 逻辑代码
public void show2(View view) {
show();
}
private void show(){
mSelectDialog = new CommonDialog(this,R.style.customDialog);
View view = View.inflate(this,R.layout.dialog_delete_edit,null);
TextView txtUse = (TextView) view.findViewById(R.id.txt_use);
TextView txtEdit = (TextView) view.findViewById(R.id.txt_edit);
TextView txtDelete = (TextView) view.findViewById(R.id.txt_delete);
txtUse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectDialog.dismiss();
}
});
txtEdit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectDialog.dismiss();
}
});
txtDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mSelectDialog.dismiss();
}
});
mSelectDialog.setView(view);
mSelectDialog.setProperty(0,0,800,420);
mSelectDialog.setCanceledOnTouchOutside(true);
mSelectDialog.show();
}
四、加载对话框
1. 布局文件dialog_device_add_notice.xml
2. 逻辑代码
private CommonDialog mDialog;
public void click(View view) {
showDialog();
}
private void showDialog() {
mDialog = new CommonDialog(this,R.style.customDialog);
View view = View.inflate(this, R.layout.dialog_device_add_notice,null);
final LinearLayout llBefore = (LinearLayout)view.findViewById(R.id.ll_before);
final LinearLayout llAfter = (LinearLayout)view.findViewById(R.id.ll_after);
final ImageView imgWaiting = (ImageView) view.findViewById(R.id.img_config_icon1);
TextView txtTitle = (TextView) view.findViewById(R.id.txt_title);
txtTitle.setText(getString(R.string.base_update_notice));
final TextView txtMsg = (TextView) view.findViewById(R.id.txt_msg);
TextView txtCancle = (TextView) view.findViewById(R.id.txt_cancle);
txtMsg.setText(getString(R.string.base_need_update));
txtMsg.setGravity(Gravity.CENTER);
txtCancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDialog.dismiss();
}
});
TextView txtOk = (TextView) view.findViewById(R.id.txt_ok);
llBefore.setVisibility(View.VISIBLE);
llAfter.setVisibility(View.GONE);
txtOk.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//versionDialog.dismiss();
//updateVersion();
txtMsg.setText("正在搜索,请稍后...");
llBefore.setVisibility(View.GONE);
llAfter.setVisibility(View.VISIBLE);
AnimationDrawable animationDrawable = (AnimationDrawable) imgWaiting.getDrawable();
if(animationDrawable != null){
animationDrawable.start();
}
}
});
mDialog.setView(view);
mDialog.setProperty(0,0,800,600);
mDialog.setCanceledOnTouchOutside(true);
mDialog.show();
}
五、编辑对话框
1. 布局文件 dialog_mon_name.xml
2. 逻辑代码
private CommonDialog mEditDialog;
public void show(View view) {
updateDoorDialog();
}
private void updateDoorDialog() {
mEditDialog = new CommonDialog(this,R.style.customDialog);
View view = View.inflate(this, R.layout.dialog_mon_name, null);
final ContainsEmojiEditText dgName = (ContainsEmojiEditText) view.findViewById(R.id.ed_name);
view.findViewById(R.id.txt_ok).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String newName = dgName.getText().toString().trim();
if (TextUtils.isEmpty(newName)) {
// ToastUtil.showToast("名称不能为空!");
return;
}
if (mEditDialog != null) mEditDialog.dismiss();
}
});
view.findViewById(R.id.txt_cancle).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mEditDialog != null) mEditDialog.dismiss();
}
});
mEditDialog.setView(view);
mEditDialog.setProperty(0,0,800,600);
mEditDialog.setCanceledOnTouchOutside(true);
mEditDialog.show();
}
源码:传送门