自定义dialog

代码展示

import android.content.Context;
import android.support.annotation.IdRes;
import android.support.annotation.LayoutRes;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.TextView;

import com.ustcsoft.cartoonview.R;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by sunxunchao on 2018/1/15.
 */

public class CustomDialog {

    private AlertDialog.Builder builder;
    private AlertDialog dialog;
    private View view;

    private CustomDialog(Context context, @LayoutRes int layoutId) {
        builder = new AlertDialog.Builder(context, R.style.comment_dialog);
        view = LayoutInflater.from(context).inflate(layoutId, null);
        builder.setView(view);
        dialog = builder.create();
    }


    private void setOnClick(@IdRes int id, View.OnClickListener l) {
        if (view != null) {
            view.findViewById(id).setOnClickListener(l);
        }
    }

    private void setContent(String content, @IdRes int id) {
        if (view != null) {
            View contentView = view.findViewById(id);
            if (contentView instanceof TextView) {
                ((TextView) contentView).setText(String.valueOf(content));
            }
        }
    }

    public void show() {
        if (dialog != null && !dialog.isShowing()) {
            dialog.show();
        }
    }

    public void dismiss() {
        if (dialog != null && dialog.isShowing()) {
            dialog.dismiss();
        }
    }

    public static class Builder {

        private Context context;
        private int layoutId;
        private String content;
        private int contentId;
        private List<Integer> clickIds;
        private List<View.OnClickListener> onClickListeners;

        public Builder(Context context) {
            this.context = context;
            clickIds = new ArrayList<>();
            onClickListeners = new ArrayList<>();
        }


        public Builder setContent(@IdRes int contentId, String content) {
            this.content = content;
            this.contentId = contentId;
            return this;
        }

        public Builder setOnClick(@IdRes int clickId, View.OnClickListener onClickListener) {
            if (clickIds.indexOf(clickId) == -1){
                this.clickIds.add(clickId);
                this.onClickListeners.add(onClickListener);
            }
            return this;
        }

        public Builder setView(@LayoutRes int layoutId) {
            this.layoutId = layoutId;
            return this;
        }

        public CustomDialog create() {
            CustomDialog customDialog = new CustomDialog(context, layoutId);
            customDialog.setContent(content, contentId);
            for (int i = 0; i < clickIds.size(); i++) {
                if (onClickListeners.size() == clickIds.size() && onClickListeners.get(i) != null) {
                    customDialog.setOnClick(clickIds.get(i), onClickListeners.get(i));
                }
            }
            return customDialog;
        }

    }
}
样式

 <style name="comment_dialog" parent="android:Theme.Dialog">
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>     
        <item name="android:backgroundDimEnabled">true</item>
    </style>

使用方式

CustomDialog dialog = new CustomDialog.Builder(getActivity())
        .setView(R.layout.dialog_sign_up)
        .setContent(R.id.dialog_message_tv,"内容")
        .setOnClick(R.id.btn1, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showLong(getActivity(),"1");
            }
        })
        .setOnClick(R.id.btn2, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showLong(getActivity(),"2");
            }
        })
        .setOnClick(R.id.btn3, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ToastUtil.showLong(getActivity(),"3");
            }
        })
        .create();
dialog.show();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值