package com.aries.ui.widget.alert; import android.content.Context; import android.content.DialogInterface; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.text.TextUtils; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ScrollView; import android.widget.TextView; import com.aries.ui.util.DrawableUtil; import com.aries.ui.util.FindViewUtil; import com.aries.ui.widget.BasisDialog; import java.util.ArrayList; import java.util.List; /** * @Author: AriesHoo on 2018/7/19 10:46 * @E-Mail: AriesHoo@126.com * Function: UIAlert Dialog+Builder模式重构 * Description: * 1、2018-3-29 14:07:04 新增获取Title及Message回调 * 2、新增控制Button点击是否关闭弹框属性{@link Builder#setButtonClickDismissEnable(boolean)} * 3、2019-9-16 13:29:33 修改{@link Builder#createButtons()}多个button 高度默认值避免高度适配异常 */ public class UIAlertDialog extends BasisDialog { public UIAlertDialog(Context context) { super(context, R.style.AlertViewDialogStyle); } public interface ICreateButtons { /** * 设置Title 之前的View * * @return */ View createBeforeTitle(); /** * 创建Button * * @return */ List createButtons(); } /** * 获取Title * * @return */ public TextView getTitle() { return FindViewUtil.getTargetView(mContentView, R.id.tv_titleAlertDialog); } /** * 返回Message控件 * * @return */ public TextView getMessage() { return FindViewUtil.getTargetView(mContentView, R.id.tv_messageAlertDialog); } /** * 获取Button * {@link DialogInterface#BUTTON_NEGATIVE} * {@link DialogInterface#BUTTON_NEUTRAL} * {@link DialogInterface#BUTTON_POSITIVE} * * @param witch * @return */ public Button getButton(int witch) { return FindViewUtil.getTargetView(mContentView, witch == DialogInterface.BUTTON_NEGATIVE ? R.id.btn_negativeAlertDialog : witch == DialogInterface.BUTTON_NEUTRAL ? R.id.btn_neutralAlertDialog : R.id.btn_positiveAlertDialog); } /** * QQ风格--title上边一个横线 */ public static class DividerQQBuilder extends DividerBuilder { protected Drawable mTitleDivider; protected int mTitleDividerHeight; public DividerQQBuilder(Context context) { super(context); setTitleDividerHeight(dp2px(4)) .setTitleDividerColor(Color.argb(255, 17, 183, 245)) .setBackgroundColor(Color.WHITE) .setBorderLessButtonEnable(true) .setBackgroundPressedColor(Color.argb(255, 245, 245, 245)) .setBackgroundRadius(6f) .setPadding(dp2px(20)) .setNegativeButtonTextSize(18f) .setPositiveButtonTextSize(18f) .setNeutralButtonTextSize(18f) .setDividerColor(Color.argb(255, 230, 230, 230)) .setMessageTextColor(Color.BLACK) .setNegativeButtonTextColor(Color.BLACK) .setNeutralButtonTextColor(Color.BLACK) .setPositiveButtonTextColor(Color.BLACK) .setTitleTextColor(Color.BLACK) .setTitleTextSize(20f); } /** * 设置分割线drawable * * @param drawable * @return */ public DividerQQBuilder setTitleDivider(Drawable drawable) { mTitleDivider = drawable; return this; } public DividerQQBuilder setTitleDividerColor(int color) { return setTitleDivider(new ColorDrawable(color)); } public DividerQQBuilder setTitleDividerResource(int res) { return setTitleDivider(mResourceUtil.getDrawable(res)); } /** * 设置分割线宽度 * * @param h * @return */ public DividerQQBuilder setTitleDividerHeight(int h) { mTitleDividerHeight = h; return this; } public DividerQQBuilder setTitleDividerHeightResource(int res) { return setTitleDividerHeight(mResourceUtil.getDimensionPixelSize(res)); } protected Drawable getTitleDrawable(Drawable drawable) { if (drawable != null && drawable instanceof ColorDrawable) { GradientDrawable gradient = new GradientDrawable(); gradient.setColor(((ColorDrawable) drawable).getColor()); float[] radiusArr = new float[8]; radiusArr[0] = mBackgroundRadius; radiusArr[1] = mBackgroundRadius; radiusArr[2] = mBackgroundRadius; radiusArr[3] = mBackgroundRadius; gradient.setCornerRadii(radiusArr); drawable = gradient; } return drawable; } @Override public View createBeforeTitle() { if (mTitleDivider != null && mTitleDividerHeight > 0) { return getDivider(ViewGroup.LayoutParams.MATCH_PARENT, mTitleDividerHeight, getTitleDrawable(mTitleDivider)); } return super.createBeforeTitle(); } } public static class DividerIOSBuilder extends DividerBuilder { public DividerIOSBuilder(Context context) { super(context); } } /** * iOS风格 */ protected static class DividerBuilder extends Builder { private Drawable mDivider; private int mDividerWidth; protected LinearLayout mLLayoutButton; protected List