【Android】Android通用交互对话框——自定义Dialog(复制粘贴即可)
项目中,几乎是百分之百会用到对话框,比如
“确定要删除吗?” ——确定,取消
“确定要进行此操作吗?” ——确定,取消
“确定要xxx”,——确定,取消
“对不起,不能进行此操作”,——确定
“系统故障”,——确定
“操作成功”,——确定
诸如此类。一种是有确定、取消按钮,一种是只有一个确定按钮。
Android SDK提供的对话框样式比较固定。实际项目中一般需要我们自定义。下面提供了一种简洁可复用的自定义对话框。
下面提供一种通用的对话框代码,只要稍微改一下样式即可。
以下代码直接复制到项目中即可。
import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.TextView;
/** * create by devnn on 2019-07-25 */
public class ConfirmDialog extends Dialog implements View.OnClickListener{
private ImageButton imgClose;//右上角,关闭图标
private Button btnConfirm;//确认按钮
private Button btnCancel;//取消按钮
private TextView tvMessage;//要显示的消息
private ConfirmListener confirmListener;//确认按钮的回调
private boolean showCancelButton;//是否需要显示取消按钮
public ConfirmDialog(Context context,boolean showCancelButton) {
super(context);
this.showCancelButton=showCancelButton;
}
//监听器,需要你的Activity实现它
public interface ConfirmListener{
void onConfirm();
void onCancel();
}
/** * 设置"确定"按钮的监听 * @param confirmListener */
public void setConfirmListener(ConfirmListener confirmListener) {
this.confirmListener = confirmListener;
}
/** * 设置要显示的文字,比如"确定要删除吗?" * @param message */
public void setMessage(String message) {
if (tvMessage != null) {
tvMessage.setText(message);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
setContentView(R.layout.layout_dialog_confirm);
imgClose=findViewById(R.id.dialog_close);
btnConfirm=findViewById(R.id.dialog_confirm);
btnConfirm.setOnClickListener(this);
btnCancel=findViewById(R.id.dialog_cancel);
btnCancel.setOnClickListener(this);
if(showCancelButton){
btnCancel.setVisibility(View.VISIBLE);
}else{
btnCancel.setVisibility(View.GONE);
}
tvMessage=findViewById(R.id.dialog_message);
imgClose.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.equals(this.imgClose)){
dismiss();
}else if(v.equals(this.btnConfirm)){
if(confirmListener!=null){
confirmListener.onConfirm();
}
dismiss();
}else if(v.equals(this.btnCancel)){
if(confirmListener!=null){
confirmListener.onCancel();
}
dismiss();
}
}
}
下面是布局文件layout_dialog_confirm.xml,按照UI的要求稍微修改一下样式即可。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="260dp" android:layout_height="wrap_content" android:background="circle_background"> <!--可设置圆角背景-->
<ImageButton android:id="@+id/dialog_close" android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentTop="true" android:layout_alignParentRight="true" android:layout_marginTop="10dp" android:layout_marginRight="5dp" android:contentDescription="@string/logo" android:visibility="visible" />
<TextView android:id="@+id/dialog_message" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/dialog_close" android:layout_marginLeft="20dp" android:lineSpacingMultiplier="1.2" android:layout_marginTop="10dp" android:textSize="14sp" android:layout_marginRight="20dp" android:text="..." android:textColor="#333333" />
<LinearLayout android:layout_width="200dp" android:layout_height="56dp" android:layout_below="@+id/dialog_message" android:layout_centerHorizontal="true" android:layout_marginTop="20dp" android:orientation="horizontal">
<Button android:id="@+id/dialog_confirm" style="?attr/button_style" android:layout_width="0dp" android:layout_height="36dp" android:layout_weight="1" android:text="@string/dialog_confirm" />
<Button android:id="@+id/dialog_cancel" style="?attr/button_style" android:layout_width="0dp" android:layout_height="36dp" android:layout_marginLeft="20dp" android:visibility="gone" android:layout_weight="1" android:text="@string/dialog_cancel" />
</LinearLayout>
</RelativeLayout>
显示对话框代码示例:
//第二次参数表示是否要显示取消按钮true显示false不显示
ConfirmDialog confirmDialog = new ConfirmDialog(this, true);
confirmDialog.setConfirmListener(new ConfirmDialog.ConfirmListener() {
@Override
public void onConfirm() {
//处理确定回调
}
@Override
public void onCancel() {
//处理取消回调
}
});
confirmDialog.show();
confirmDialog.setMessage("确定要删除吗?");
还没有评论,来说两句吧...