【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;
    }

    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>

显示对话框代码示例:

	ConfirmDialog confirmDialog = new ConfirmDialog(this, true);
   		 confirmDialog.setConfirmListener(new ConfirmDialog.ConfirmListener() {
       		 @Override
       		 public void onConfirm() {
			//处理确定回调
        	}

       		 @Override
        	public void onCancel() {
			//处理取消回调
        	}
      	});
	confirmDialog.show();
	confirmDialog.setMessage("确定要删除吗?");
原创文章 56 获赞 44 访问量 9万+

猜你喜欢

转载自blog.csdn.net/devnn/article/details/97379058