Android开发一步一步带你手写一个功能强大的对话框Dialog

 

1,在layout里面新建一个布局文件,起名common_dialog

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="285dp"
    android:layout_height="wrap_content"
    android:background="@drawable/common_white_bg_round_cornor_bg"
    android:gravity="center_horizontal"
    android:paddingTop="20dp"
    android:baselineAligned="false"
    android:orientation="vertical">

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/dialogIcon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:layout_centerHorizontal="true"
            android:src="@mipmap/dialog_icon_exclam" />
        <TextView
            android:id="@+id/ivText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="100dp"
            android:layout_centerHorizontal="true"
            android:text="13345676789"
            android:textColor="#ffffff"
            android:textSize="12sp"
            android:visibility="gone" />
    </RelativeLayout>

    <TextView
        android:id="@+id/dialogTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingLeft="22dp"
        android:paddingRight="22dp"
        android:gravity="center_horizontal"
        android:textColor="#333333"
        android:textSize="19sp" />

    <TextView
        android:id="@+id/dialogContent"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="7dp"
        android:paddingLeft="22dp"
        android:paddingRight="22dp"
        android:layout_marginTop="10dp"
        android:gravity="center"
        android:textColor="#666666"
        android:textSize="14sp" />
    <LinearLayout
        android:id="@+id/dialogContentListLayout"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="7dp"
        android:paddingLeft="22dp"
        android:paddingRight="22dp"
        android:visibility="gone"
        android:orientation="vertical"/>

    <LinearLayout
        android:id="@+id/dialogContentCheckboxLayout"
        android:layout_marginTop="10dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lineSpacingExtra="7dp"
        android:paddingLeft="22dp"
        android:paddingRight="22dp"
        android:layout_gravity="left"
        android:visibility="gone"
        android:orientation="vertical">

        <CheckBox
            android:id="@+id/checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="下次不再提示"
            android:textColor="#999999"
            android:button="@null"
            android:background="@null"
            android:drawableLeft="@drawable/round_radio_selector"
            android:drawablePadding="5dp"
            />
        </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginTop="20dp"
        android:background="#ECECEC" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">

        <Button
            android:id="@+id/dialogBtnOne"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:drawableRight="@drawable/common_inner_vertical_line"
            android:gravity="center"
            android:clickable="true"
            android:textColor="#343C5C"
            android:text="取消"
            android:textSize="17sp" />

        <Button
            android:id="@+id/dialogBtnTwo"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:background="@null"
            android:gravity="center"
            android:text="好"
            android:clickable="true"
            android:textColor="#1E96FA"
            android:textSize="17sp" />
    </LinearLayout>
</LinearLayout>

其中background表示对话框是一个矩形会话框,并设置他的填充色和描边。在drawable里面新建一个文件命名common_white_bg_round_cornor_bg。

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#ffffff"></solid>
    <corners android:radius="2dp"/>
    <stroke
        android:color="#ffffff"
        android:width="1dp"/>
</shape>

至于baselineAligned属性,主要作用是控制一个布局里面的视图是对齐还是不对齐,具体自己百度。

round_radio_selector这个资源也是要在drawable里面新建一个名为round_radio_selector的文件:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@mipmap/ic_select_disable" android:state_checked="true" android:state_enabled="false" />
    <item android:drawable="@mipmap/common_icon_select_pressed" android:state_checked="true" android:state_enabled="true" />
    <item android:drawable="@mipmap/common_icon_select_normal" />
</selector>
common_inner_vertical_line也是在drawable里面新建名为common_inner_vertical_line的文件如下:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size android:width="1dp" android:height="1920px"/>
    <solid android:color="#ECECEC"/>

</shape>
<style name="CommonDialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <!-- 边框 -->
        <item name="android:windowNoTitle">true</item>
        <!-- 无标题 -->
        <item name="android:windowBackground">#000</item>
        <!-- 背景透明 -->
        <item name="android:windowIsFloating">true</item>
        <!-- 是否浮现在activity之上 -->
        <item name="android:windowContentOverlay">@null</item>
    </style>

以上文件中所使用到的图片文件我已经上传到我百度云,需要的可以给我留言,我会给你们下载图片的链接:

2,新建CommonDialog.java文件,进程Dialog


import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.didi.es.base.activitymgr.ActivityManager;
import com.didi.es.base.util.ResourcesUtil;
import com.didi.es.base.util.TextUtil;
import com.didi.es.psngr.R;

import java.util.List;

public class CommonDialog extends Dialog implements View.OnClickListener {
    private Context mContext;
    /**
     * 对话框上面的图标
     */
    private ImageView dialogIcon;
    /**
     * title部分
     */
    private TextView dialogTitle;
    /**
     * 内容部分
     */
    private TextView dialogContent;
    /**
     * 图片文字部分
     */
    private TextView ivText;

    /**
     * 对话框第一个按钮  和 第二个按钮
     */
    private Button dialogBtnOne, dialogBtnTwo;

    private CommonDialogListener listener;
    private LinearLayout dialogContentListLayout;
    private LinearLayout dialogContentCheckboxLayout;
    private CheckBox checkBox;

    public CommonDialog(Context context) {
        super(context, R.style.CommonDialog);
        mContext = context;
        setContentView(R.layout.common_dialog);
        initLayout();
    }

    private void initLayout() {
        dialogIcon = (ImageView) findViewById(R.id.dialogIcon);
        dialogTitle = (TextView) findViewById(R.id.dialogTitle);
//        dialogTitle.getPaint().setFakeBoldText(true);
        dialogContent = (TextView) findViewById(R.id.dialogContent);
        ivText = (TextView)findViewById(R.id.ivText);
        dialogBtnOne = (Button) findViewById(R.id.dialogBtnOne);
        dialogBtnTwo = (Button) findViewById(R.id.dialogBtnTwo);
        dialogContentListLayout = (LinearLayout) findViewById(R.id.dialogContentListLayout);
        dialogContentCheckboxLayout = (LinearLayout) findViewById(R.id.dialogContentCheckboxLayout);
        checkBox = (CheckBox) findViewById(R.id.checkbox);
//        checkBox.setOnClickListener(this);
        dialogBtnOne.setOnClickListener(this);
        dialogBtnTwo.setOnClickListener(this);
    }

    /**
     * @param dialogIconResId    图片的资源ID 传-1表示隐藏此控件
     * @param dialogTitleResId   title的资源ID 传-1表示隐藏此控件
     * @param dialogContentResId 内容的资源ID 传-1表示隐藏此控件
     * @param dialogBtnOneResId  第一个按钮的文字资源ID 传-1表示隐藏此控件
     * @param dialogBtnTwoResId  第二个按钮的文字资源ID 必须存在
     * @return
     */
    public CommonDialog set(int dialogIconResId, int dialogTitleResId, int dialogContentResId, int dialogBtnOneResId, int dialogBtnTwoResId) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (dialogTitleResId < 0) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(dialogTitleResId);
        }

        if (dialogContentResId < 0) {
            dialogContent.setVisibility(View.GONE);
        } else {
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentResId);
        }
        if (dialogBtnOneResId < 0) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneResId);
        }

        dialogBtnTwo.setText(dialogBtnTwoResId);
        return this;
    }
    public CommonDialog set(int dialogIconResId, String title, int dialogContentResId, int dialogBtnOneResId, int dialogBtnTwoResId) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(title);

        if (dialogContentResId < 0) {
            dialogContent.setVisibility(View.GONE);
        } else {
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentResId);
        }
        if (dialogBtnOneResId < 0) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneResId);
        }

        dialogBtnTwo.setText(dialogBtnTwoResId);
        return this;
    }

    /**
     * @param dialogIconResId  传-1表示需要隐藏此项
     * @param dialogTitleTxt   传 null表示需要隐藏此项
     * @param dialogContentTxt 传 null表示需要隐藏此项
     * @param dialogBtnOneTxt  传null表示不显示此项(取消按钮)
     * @param dialogBtnTwoTxt  不能为null(确定按钮)
     * @return
     */
    public CommonDialog set(int dialogIconResId, String dialogTitleTxt, String dialogContentTxt, String dialogBtnOneTxt, String dialogBtnTwoTxt) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (dialogTitleTxt == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(dialogTitleTxt);
//            TextUtil.changeColor(dialogTitle, dialogTitleTxt, "{", "}", ResourcesUtil.getColor(R.color.color_s_orange));
        }

        if (dialogContentTxt == null) {
            dialogContent.setVisibility(View.GONE);
        } else {
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentTxt);

        }
        if (TextUtil.isEmpty(dialogBtnOneTxt)) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneTxt);
        }
        dialogBtnTwo.setText(dialogBtnTwoTxt);
        return this;
    }

    /**
     * @param dialogIconResId   传-1表示需要隐藏此项
     * @param dialogTitleTxt    传 null表示需要隐藏此项
     * @param dialogContentList 传 null表示需要隐藏此项
     * @param dialogBtnOneTxt   传null表示不显示此项
     * @param dialogBtnTwoTxt   不能为null
     * @return
     */
    public CommonDialog set(List<String> dialogContentList, int dialogIconResId, String dialogTitleTxt, String dialogBtnOneTxt, String dialogBtnTwoTxt) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (dialogTitleTxt == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(dialogTitleTxt);
        }
        dialogContent.setVisibility(View.GONE);
        //当内容列表为空时,不显示列表样式
        if (dialogContentList == null || dialogContentList.size() == 0) {
            dialogContentListLayout.setVisibility(View.GONE);
            //当内容列表长度为1时,以普通内容形式展示
        } else if (dialogContentList.size() == 1) {
            dialogContentListLayout.setVisibility(View.GONE);
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentList.get(0));
        } else {
            dialogContentListLayout.setVisibility(View.VISIBLE);
            dialogContentListLayout.removeAllViews();
            for (int i = 0; i < dialogContentList.size(); i++) {
                addListItem(dialogContentListLayout, dialogContentList.get(i));
            }
        }
        if (TextUtil.isEmpty(dialogBtnOneTxt)) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneTxt);
        }
        dialogBtnTwo.setText(dialogBtnTwoTxt);
        return this;
    }

    /**
     * 可设置内容的颜色,要加颜色的字体默认用{带颜色的文字}来格式化
     * @param dialogIconResId   传-1表示需要隐藏此项
     * @param title    传 null表示需要隐藏此项
     * @param content 传 null表示需要隐藏此项
     * @param dialogBtnOneTxt   传null表示不显示此项
     * @param dialogBtnTwoTxt   不能为null
     * @param contentColor   字体的颜色值(不是resouceId),不需要传0即可
     * @return
     */
    public CommonDialog set(int dialogIconResId, String title,String content, String dialogBtnOneTxt, String dialogBtnTwoTxt,int contentColor) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (title == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(title);
        }
        dialogContent.setVisibility(View.GONE);
        //当内容列表为空时,不显示列表样式
        if (TextUtils.isEmpty(content)) {
            dialogContentListLayout.setVisibility(View.GONE);
            //当内容列表长度为1时,以普通内容形式展示
        } else {
            dialogContentListLayout.setVisibility(View.GONE);
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(content);
            if(contentColor!=0){
                TextUtil.changeColor(dialogContent, content, "{", "}", contentColor);
            }
        }
        if (TextUtil.isEmpty(dialogBtnOneTxt)) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneTxt);
        }
        dialogBtnTwo.setText(dialogBtnTwoTxt);
        return this;
    }
    private void addListItem(LinearLayout parent, String item) {
        DialogListItem itemView = new DialogListItem(mContext);
        RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
        lp.topMargin = ResourcesUtil.getDimensionPixelSize(R.dimen.dialog_list_item_margin);
        lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        itemView.setContent(item);
        itemView.setLayoutParams(lp);
//        itemView.setPadding(60, 0, 86, 30);
        parent.addView(itemView);
    }

    /**
     * @param dialogIconResId  传-1表示需要隐藏此项
     * @param dialogTitleTxt   传 null表示需要隐藏此项
     * @param dialogContentTxt 传 null表示需要隐藏此项
     * @param dialogBtnOneTxt  传null表示不显示此项(取消按钮)
     * @param dialogBtnTwoTxt  不能为null(确定按钮)
     * @param checkboxTxt       不能为null(checkbox 文字)
     * @return
     */
    public CommonDialog set(int dialogIconResId, String dialogTitleTxt, String dialogContentTxt, String dialogBtnOneTxt, String dialogBtnTwoTxt, String checkboxTxt) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (dialogTitleTxt == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(dialogTitleTxt);
//            TextUtil.changeColor(dialogTitle, dialogTitleTxt, "{", "}", ResourcesUtil.getColor(R.color.color_s_orange));
        }

        if (dialogContentTxt == null) {
            dialogContent.setVisibility(View.GONE);
        } else {
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentTxt);

        }
        if (TextUtil.isEmpty(dialogBtnOneTxt)) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneTxt);
        }

        if (TextUtil.isEmpty(checkboxTxt)) {
            dialogContentCheckboxLayout.setVisibility(View.GONE);
        } else {
            dialogContentCheckboxLayout.setVisibility(View.VISIBLE);
            checkBox.setText(checkboxTxt);
        }

        dialogBtnTwo.setText(dialogBtnTwoTxt);
        return this;
    }

    /**
     * @param dialogIconResId  传-1表示需要隐藏此项
     * @param dialogTitleTxt   传 null表示需要隐藏此项
     * @param dialogContentTxt 传 null表示需要隐藏此项
     * @param dialogBtnOneTxt  传null表示不显示此项(取消按钮)
     * @param dialogBtnTwoTxt  不能为null(确定按钮)
     * @param checkboxTxt       不能为null(checkbox 文字)
     * @param contentColor      内容颜色
     * @return
     */
    public CommonDialog set(int dialogIconResId, String dialogTitleTxt, String dialogContentTxt, String dialogBtnOneTxt, String dialogBtnTwoTxt, int contentColor, String checkboxTxt) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if (dialogTitleTxt == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(dialogTitleTxt);
//            TextUtil.changeColor(dialogTitle, dialogTitleTxt, "{", "}", ResourcesUtil.getColor(R.color.color_s_orange));
        }

        dialogContent.setVisibility(View.GONE);
        //当内容列表为空时,不显示列表样式
        if (TextUtils.isEmpty(dialogContentTxt)) {
            dialogContentListLayout.setVisibility(View.GONE);
            //当内容列表长度为1时,以普通内容形式展示
        } else {
            dialogContentListLayout.setVisibility(View.GONE);
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(dialogContentTxt);
            if(contentColor!=0){
                TextUtil.changeColor(dialogContent, dialogContentTxt, "{", "}", contentColor);
            }
        }
        if (TextUtil.isEmpty(dialogBtnOneTxt)) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(dialogBtnOneTxt);
        }

        if (TextUtil.isEmpty(checkboxTxt)) {
            dialogContentCheckboxLayout.setVisibility(View.GONE);
        } else {
            dialogContentCheckboxLayout.setVisibility(View.VISIBLE);
            checkBox.setText(checkboxTxt);
        }

        dialogBtnTwo.setText(dialogBtnTwoTxt);
        return this;
    }

    /**
     * @param dialogIconResId  传-1表示需要隐藏此项
     * @param text             文字列表  0、图片文字  1、title  2、content  3、BtnOne文字  4、BtnTwo文字(不能为null)
     * @return
     */
    public CommonDialog set(int dialogIconResId,List<String> text) {
        if (dialogIconResId < 0) {
            dialogIcon.setVisibility(View.GONE);
        } else {
            dialogIcon.setVisibility(View.VISIBLE);
            dialogIcon.setImageResource(dialogIconResId);
        }
        if(text.get(0)==null){
            ivText.setVisibility(View.GONE);
        }
        else{
            ivText.setVisibility(View.VISIBLE);
            ivText.setText(text.get(0));
            ivText.setAlpha(0.8f);
            ivText.setBackgroundColor(Color.argb(0, 0, 0, 0));
        }
        if (text.get(1) == null) {
            dialogTitle.setVisibility(View.GONE);
        } else {
            dialogTitle.setVisibility(View.VISIBLE);
            dialogTitle.setText(text.get(1));
        }

        if (text.get(2) == null) {
            dialogContent.setVisibility(View.GONE);
        } else {
            dialogContent.setVisibility(View.VISIBLE);
            dialogContent.setText(text.get(2));

        }
        if (TextUtil.isEmpty(text.get(3))) {
            dialogBtnOne.setVisibility(View.GONE);
        } else {
            dialogBtnOne.setVisibility(View.VISIBLE);
            dialogBtnOne.setText(text.get(3));
        }
        dialogBtnTwo.setText(text.get(4));
        return this;
    }

//如果编译不通过的话,可以把这个收尾方法去掉,使用Dialog原生的show()方法展示对话框
    @Override
    public void show() {
        Context context = mContext;
        if (context == null) return;
        if (context instanceof Activity) {
            Activity activity = (Activity) context;
            if (ActivityManager.getInstance().getTopActivityInApp() == activity && !activity.isFinishing())
                try {
                    super.show();
                } catch (Exception e) {
                    e.printStackTrace();
                }
        }
    }

    @Override
    public void cancel() {
        if (isShowing()) {
            try {
                super.cancel();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        mContext = null;
        dialogIcon = null;
        dialogTitle = null;
        dialogContent = null;
        dialogBtnOne = null;
        dialogBtnTwo = null;
        listener = null;
    }


    public CommonDialog setListener(CommonDialogListener listener) {
        this.listener = listener;
        return this;
    }

    public boolean isCheckBoxChecked() {
        return checkBox.isChecked();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.dialogBtnOne:
                if (listener != null) {
                    listener.cancel();
                }
                cancel();
                break;
            case R.id.dialogBtnTwo:
                if (listener != null) {
                    listener.submit();
                }
                cancel();
                break;
//            case R.id.checkbox:
//                if (listener != null) {
//                    listener.submit();
//                }
//                break;
        }
    }


    public static abstract class CommonDialogListener {
        /**
         * 有两个按钮的确认事件 或 只有一个按钮的事件
         */
        public void submit() {

        }

        /**
         * 取消按钮事件
         */
        public void cancel() {

        }
    }

    /**
     * 对话框图标ICON类型
     */
    public enum IconType {
        /**
         * 对勾
         */
        RIGHT(R.drawable.dialog_icon_success),
        /**
         * 叹号
         */
        INFO(R.drawable.dialog_icon_exclam),
        /**
         * 啥也没有
         */
        NONE(-1);
        private int resId;

        private IconType(int resId) {
            this.resId = resId;
        }

        public int resId() {
            return resId;
        }
    }

}

import android.content.Context;
import android.text.Spanned;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.didi.es.psngr.R;

/**
 * 列表型对话框的每一项
 * @author liuwei
 */
public class DialogListItem extends RelativeLayout {
    /**显示的星号**/
    private TextView star;
    /**显示的文案**/
    private TextView content;

    public DialogListItem(Context context) {
        this(context, null);
    }

    public DialogListItem(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public DialogListItem(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initViews(context);
    }

    private void initViews(Context context) {
        LayoutInflater.from(context).inflate(R.layout.dialog_list_item, this);
        star = (TextView) findViewById(R.id.star);
        content = (TextView) findViewById(R.id.content);
    }

    public void setContent(String content) {
        this.content.setText(content);
    }

    public void setSpannedContent(Spanned content) {
        this.content.setText(content);
    }

    public void setStarInvisible() {
        star.setVisibility(INVISIBLE);
    }

}

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import android.widget.Toast;

public class DownloadManager {
    private static DownloadManager downloadManager;
    private static Context c;
    private DownloadManager(){
        LocalBroadcastManager mgr = LocalBroadcastManager.getInstance(c);
        mgr.registerReceiver(mReceiver, new IntentFilter(DownloadService.DOWNLOAD_PROGRESS_ACTION));
    }
    DownloadService.ProgressReceiver mReceiver=new DownloadService.ProgressReceiver(){
        @Override
        public void onReceive(Context context, Intent intent) {
            Log.e("DownloadManager","ykyk");
            Toast.makeText(c,"yk",Toast.LENGTH_SHORT).show();
        }
    };
    public static DownloadManager getInstance(Context context){
        if (downloadManager==null){
            c=context;
            downloadManager=new DownloadManager();
        }
        return downloadManager;
    }
    public void startSer(String url,String path){
        Intent intent=new Intent(c,DownloadService.class);
        intent.putExtra("url",url);
        intent.putExtra("path",path);
        Log.e("DownloadManger","yly---1");
        c.startService(intent);
    }

}

3,展示对话框:

    @Override
            public void onClick(View v) {

                Log.e("MainAcitvity","onclick");
                myDialog=new CommonDialog(MainActivity.this);
                myDialog.set(contentList,-1,
                        "更新提示", "取消",
                        "升级").setListener(dialogUpdateListener);
                myDialog.setCancelable(true);
                myDialog.setCanceledOnTouchOutside(false);
                myDialog.show();
            }

4,对话框列表布局

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/star"
        android:layout_width="4dp"
        android:layout_height="4dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="5dp"
        android:background="@drawable/round_point" />

    <TextView
        android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="7dp"
        android:layout_toRightOf="@id/star"
        android:lineSpacingExtra="10px"
        android:singleLine="false"
        android:text="如果您在收到车费账单30分钟内未主动确认支付,微信支付会自动扣款,并以短信方式通知您"
        android:textColor="#666666"
        android:textSize="14sp" />

</merge>

关于merge的使用方法,可以查看这一篇文章:

merge使用方法详解https://blog.csdn.net/yaoyaoyao_123/article/details/89183518

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值