【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("确定要删除吗?");
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值