Androdi自定义对话框且带取消按钮与确认按钮的回调


1.先扩展android系统自带的Dialog,将布局与主题属性全抛出来,实现数据与视图分离:

import android.app.Dialog;
import android.content.Context;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;


/**
 * 自定义对话框
 *
 * Created by XiaobingLiu on 2016/10/26.
 */
public class CustomDialog extends Dialog implements View.OnClickListener
{
    private int layoutRes;
    private Context context;
    private int nComfirmBtnID;
    private int nCancelBtnID;

    private DialogCallbackListener mCancelClickListener;
    private DialogCallbackListener mConfirmClickListener;


    private View yes;
    private View no;


    public CustomDialog(Context context)
    {
        super(context);
        this.context = context;
    }
    /**
     * 需要自定义对话框时使用下面构造器
     *
     * @param context
     * @param resLayout
     */
    public CustomDialog(Context context,int resLayout)
    {
        super(context);
        this.context = context;
        this.layoutRes = resLayout;
    }

    /**
     * 需要自定义对话框同时使用样式时使用下面构造器
     * @param context
     * @param theme
     * @param resLayout
     * @param nComfirmBtnID
     * @param nCancelBtnID
     */
    public CustomDialog(Context context, int theme,int resLayout,int nComfirmBtnID,int nCancelBtnID)
    {
        super(context, theme);
        this.context = context;
        this.layoutRes= resLayout;
        this.nCancelBtnID = nCancelBtnID;
        this.nComfirmBtnID = nComfirmBtnID;
    }
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        this.setContentView(layoutRes);
        yes = getView(this.nComfirmBtnID);
        no = getView(this.nCancelBtnID);
        yes.setOnClickListener(this);   //注册这个按钮事件
        no.setOnClickListener(this);

    }

    /**
     * 获取控件对象
     * @param id
     * @param <E>
     * @return
     */
    public <E extends  View>E getView(int id)
    {
        return (E) findViewById(id);
    }

    /**
     * 设置宽高.透明度
     * @param nScreenWidth
     * @param nScreenHeight
     * @param fAlpha            取 0~1
     */
    public void setWidthAndHeight(int nScreenWidth,int nScreenHeight,float fAlpha)
    {

        Window dialogWindow = this.getWindow();
        WindowManager.LayoutParams lp = dialogWindow.getAttributes();
        dialogWindow.setGravity(Gravity.CENTER);
        lp.width = DisplayUtils.dip2px(nScreenWidth);
        lp.height = DisplayUtils.dip2px(nScreenHeight);
        lp.alpha = fAlpha;
        dialogWindow.setAttributes(lp);
    }

    /**
     * 设置点击对话框其他地方是否关闭
     *
     * @param bIsClose
     */
    public void setCloseOnTouchOutside(boolean bIsClose)
    {
        this.setCanceledOnTouchOutside(bIsClose);
    }



    /**
     * 按钮点击事件,使用方法:
     * 在使用的地方扩展DialogCallbackListener,然后调用下面两个接口即可
     * @param listener
     * @return
     */
    public void setCancelClickListener(DialogCallbackListener listener)
    {
        mCancelClickListener = listener;
    }

    public void setConfirmClickListener(DialogCallbackListener listener)
    {
        mConfirmClickListener = listener;
    }

    /**
     * 此处处理对话框的事件回调
     * @param v
     */
    @Override
    public void onClick(View v)
    {
        if (v.getId() == nCancelBtnID)
        {
            if (mCancelClickListener != null)
            {
                mCancelClickListener.onClick(CustomDialog.this);
            }
            dismiss();
        }
        else if (v.getId() == nComfirmBtnID)
        {

            if (mConfirmClickListener != null)
            {
                mConfirmClickListener.onClick(CustomDialog.this);
            }
            else
            {
                dismiss();
            }
        }
    }



}


2.将取消按钮与确认按钮的点击事件用接口类封封装,当某个地方要实现它时去实现这个接口:

下面是接口类:

/**
 * 对话框中的确认与取消事件监听回调接口
 *
 * Created by yourdream on 2016/10/27.
 */

public interface DialogCallbackListener
{
     void onClick(CustomDialog cDialog);
}


使用方法如下 :

1.对话框的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/dialog_background"
    android:gravity="center"
    android:minHeight="354dp"
    android:minWidth="325dp"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:maxLines="1"
        android:text="@string/str_chkphone"
        android:textColor="@color/cyzs_purple_8A5899"
        android:textSize="12sp"/>

    <!--用户信息-->
    <FrameLayout
        android:id="@+id/warning_frame"
        android:layout_width="97dp"
        android:layout_height="105dp"
        android:layout_marginTop="30dp"
        android:background="#f6f6f6">

        <!--用户头像只是一个普通 的imageview-->
        <com.yourdream.app.android.widget.CYZSDraweeView
            fresco:roundAsCircle="true"
            fresco:placeholderImage="@drawable/default_avatar"
            android:id="@+id/img_bindhead"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_marginTop="15dp"
            android:layout_gravity="center_horizontal"
            android:layout_centerInParent="true"
            fresco:failureImage="@drawable/default_avatar"
            fresco:failureImageScaleType="centerInside"
            fresco:actualImageScaleType="centerInside"/>

        <TextView
            android:id="@+id/bind_user_name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="要打小怪瘦"
            android:gravity="center"
            android:layout_gravity="bottom|center_horizontal"
            android:textColor="@color/cyzs_gray_333333"
            android:layout_marginBottom="12dp" />

    </FrameLayout>



    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="center"
        android:text="@string/str_bindinfotips1"
        android:textColor="@color/cyzs_gray_333333"
        android:textSize="12sp"
        android:visibility="visible"/>

    <TextView
        android:id="@+id/txt_bindact"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text="@string/str_bindinfotips2"
        android:textColor="@color/cyzs_gray_333333"
        android:textSize="12sp"
        android:visibility="visible"/>

    <ImageView

        android:layout_width="250dp"
        android:layout_height="24dp"
        android:src="@drawable/bind_account"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="12dp" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="38dp"
        android:gravity="center">

        <TextView
            android:id="@+id/txt_cancel_button"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="@string/str_thinkagain"
            android:background="#a179ad"
            android:textSize="14sp"
            android:visibility="visible"
            android:textColor="@color/white"/>

        <TextView
            android:id="@+id/txt_confirm_button"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="@string/str_justdoit"
            android:background="#8a5899"
            android:textColor="@color/white"
            android:textSize="14sp"
            android:visibility="visible" />
    </LinearLayout>
</LinearLayout>

2.实例对话框对象,注意要设置对话框属性,需要钭对话框先显示之后才能设置:即Setwidth,setHeigth应该在show之后

/**
     * 初始化合并账号对话框
     */
    private void initDialog()
    {
        ConbineDialog = new CustomDialog(BindPhoneActivity.this,R.style.alert_dialog,R.layout.layout_bind_phonenumdialog,R.id.txt_confirm_button,R.id.txt_cancel_button);

    }

    /**
     * 显示合并账号对话框
     *
     * @param UserName
     * @param HeadURL
     */
    private static void showConbineDialog(String UserName,String HeadURL)
    {
        ConbineDialog.show();
        mAvatar = (CYZSDraweeView)ConbineDialog.findViewById(R.id.img_bindhead);
        txtUserName = (TextView)ConbineDialog.findViewById(R.id.bind_user_name);
        ConbineDialog.setConfirmClickListener(new ConfirmConbineBtn());
        UIUtils.displayAvatarImage(HeadURL, mAvatar);
        txtUserName.setText(UserName);

    }

    /**
     * 确认合并的回调
     */
    private static class ConfirmConbineBtn implements DialogCallbackListener
    {
        @Override
        public void onClick(CustomDialog cDialog)
        {
            UserController userController = UserController.getInstance(AppContext.baseContext);
            userController.ComfirMergein(nfromUserId,userActInfo[2],Integer.parseInt(AppContext.userId),ConbineResponseHandler());
        }
    }




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值