package net.anumbrella.lkshop.widget; import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import android.widget.TextView; import net.anumbrella.lkshop.R; import net.anumbrella.lkshop.utils.BaseUtils; /** * author:Anumbrella * Date:16/6/7 下午1:43 */ @SuppressLint("InflateParams") public class PromptDialog extends Dialog { private Context context; public static final int VIEW_STYLE_NORMAL = 0x00000001; public static final int VIEW_STYLE_TITLEBAR = 0x00000002; public static final int VIEW_STYLE_TITLEBAR_SKYBLUE = 0x00000003; public static final int BUTTON_COUNT_ZERO = 0x00000000; public static final int BUTTON_COUNT_ONE = 0x00000001; public static final int BUTTON_COUNT_TWO = 0x00000002; public static final int BUTTON_COUNT_THREE = 0x00000003; public static final int BUTTON_1 = 0x00000001; public static final int BUTTON_2 = 0x00000002; public static final int BUTTON_3 = 0x00000003; protected PromptDialog(Context context, int theme) { super(context, theme); this.context = context; } protected PromptDialog(Context context) { this(context, R.style.PromptDialogStyle); } protected PromptDialog(Context context, boolean cancelableOnTouchOutside) { this(context); this.setCanceledOnTouchOutside(cancelableOnTouchOutside); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Window window = this.getWindow(); WindowManager.LayoutParams params = window.getAttributes(); int marginBorder = BaseUtils.dp2px(context, 30); params.width = BaseUtils.getScreenWidth(context) - marginBorder * 2; window.setAttributes(params); } @SuppressLint({"NewApi", "InflateParams"}) public static class Builder { private PromptDialog dialog; private Context context; private CharSequence title; private CharSequence message; private CharSequence button1Text; private CharSequence button2Text; private CharSequence button3Text; private int button1TextColor; private int button2TextColor; private int button3TextColor; private int titleColor; private int messageColor; private float button1Size; private float button2Size; private float button3Size; private float titleSize; private float messageSize; private ColorStateList titleColorStateList; private ColorStateList messageColorStateList; private ColorStateList button1ColorStateList; private ColorStateList button2ColorStateList; private ColorStateList button3ColorStateList; private int titlebarGravity; private Drawable icon; private boolean cancelable = true; private boolean canceledOnTouchOutside; private View view; private int viewStyle; private PromptDialog.OnClickListener button1Listener; private PromptDialog.OnClickListener button2Listener; private PromptDialog.OnClickListener button3Listener; private int button1Flag; private int button2Flag; private int button3Flag; public Builder(Context context, int theme) { dialog = new PromptDialog(context, theme); this.context = context; initData(); } public Builder(Context context) { dialog = new PromptDialog(context); this.context = context; initData(); } private void initData() { this.button1TextColor = Color.parseColor("#808080"); this.button2TextColor = Color.parseColor("#808080"); this.button3TextColor = Color.parseColor("#808080"); this.messageColor = Color.parseColor("#696969"); this.titleColor = Color.BLACK; this.button1Size = 16; this.button2Size = 16; this.button3Size = 16; this.messageSize = 15; this.titleSize = 18; this.titlebarGravity = Gravity.CENTER; } public Context getContext() { return context; } public Builder setTitleBarGravity(int titlebarGravity) { this.titlebarGravity = titlebarGravity; return this; } public Builder setTitle(CharSequence title) { this.title = title; return this; } public Builder setTitle(int titleResId) { this.title = context.getResources().getString(titleResId); return this; } public Builder setTitleColor(int titleColor) { this.titleColor = titleColor; return this; } public Builder setTitleColor(ColorStateList titleColor) { this.titleColorStateList = titleColor; return this; } public Builder setTitleSize(float titleSize) { this.titleSize = titleSize; return this; } public Builder setIcon(Drawable icon) { this.icon = icon; return this; } public Builder setIcon(int iconResId) { this.icon = context.getResources().getDrawable(iconResId); return this; } public Builder setMessage(CharSequence message) { this.message = message; return this; } public Builder setMessage(int messageResId) { this.message = context.getResources().getString(messageResId); return this; } public Builder setMessageColor(int color) { this.messageColor = color; return this; } public Builder setMessageColor(ColorStateList color) { this.messageColorStateList = color; return this; } public Builder setMessageSize(float size) { this.messageSize = size; return this; } public Builder setButton1(CharSequence text, PromptDialog.OnClickListener listener) { this.button1Text = text; this.button1Listener = listener; button1Flag = 1; return this; } public Builder setButton1(int textId, PromptDialog.OnClickListener listener) { this.button1Text = context.getResources().getString(textId); this.button1Listener = listener; button1Flag = 1; return this; } public Builder setButton1TextColor(int color) { this.button1TextColor = color; return this; } public Builder setButton1TextColor(ColorStateList color) { this.button1ColorStateList = color; return this; } public Builder setButton1Size(float button1Size) { this.button1Size = button1Size; return this; } public Builder setButton2(CharSequence text, PromptDialog.OnClickListener listener) { this.button2Text = text; this.button2Listener = listener; button2Flag = 2; return this; } public Builder setButton2(int textId, PromptDialog.OnClickListener listener) { this.button2Text = context.getResources().getString(textId); this.button2Listener = listener; button2Flag = 2; return this; } public Builder setButton2TextColor(int color) { this.button2TextColor = color; return this; } public Builder setButton2TextColor(ColorStateList color) { this.button2ColorStateList = color; return this; } public Builder setButton2Size(float button2Size) { this.button2Size = button2Size; return this; } public Builder setButton3(CharSequence text, PromptDialog.OnClickListener listener) { this.button3Text = text; this.button3Listener = listener; button3Flag = 4; return this; } public Builder setButton3(int textId, PromptDialog.OnClickListener listener) { this.button3Text = context.getResources().getString(textId); this.button3Listener = listener; button3Flag = 4; return this; } public Builder setButton3TextColor(int color) { this.button3TextColor = color; return this; } public Builder setButton3TextColor(ColorStateList color) { this.button3ColorStateList = color; return this; } public Builder setButton3Size(float button3Size) { this.button3Size = button3Size; return this; } public Builder setCancelable(boolean cancelable) { this.cancelable = cancelable; return this; } public Builder setCanceledOnTouchOutside(boolean canceled) { this.canceledOnTouchOutside = canceled; return this; } public Builder setView(View view) { this.view = view; return this; } /** * you can set view style, and need not set others,including message style,title style,etc. */ public Builder setViewStyle(int style) { this.viewStyle = style; switch (style) { case VIEW_STYLE_TITLEBAR: this.titlebarGravity = Gravity.LEFT; break; case VIEW_STYLE_TITLEBAR_SKYBLUE: this.titleColor = Color.WHITE; this.titlebarGravity = Gravity.LEFT; break; default: break; } return this; } @SuppressLint("InflateParams") public PromptDialog create() { if (dialog == null) { return null; } View mView = null; LinearLayout mTitleBar = null; TextView mTitle = null; TextView mMessage = null; TextView btnLeft = null; TextView btnCenter = null; TextView btnRight = null; LinearLayout addView = null; LinearLayout btnView = null; View btnDivider1 = null; View btnDivider2 = null; View msgBtnDivider = null; switch (viewStyle) { case VIEW_STYLE_TITLEBAR: mView = LayoutInflater.from(context).inflate(R.layout.fynn_prompt_dialog_titlebar, null); break; case VIEW_STYLE_TITLEBAR_SKYBLUE: mView = LayoutInflater.from(context).inflate(R.layout.fynn_prompt_dialog_titlebar_skyblue, null); break; case VIEW_STYLE_NORMAL: default: mView = LayoutInflater.from(context).inflate(R.layout.fynn_prompt_dialog_normal, null); break; } mTitleBar = (LinearLayout) mView.findViewById(R.id.titlebar); mTitle = (TextView) mView.findViewById(R.id.title); mMessage = (TextView) mView.findViewById(R.id.message); addView = (LinearLayout) mView.findViewById(R.id.layout_addview); btnLeft = (TextView) mView.findViewById(R.id.button_left); btnCenter = (TextView) mView.findViewById(R.id.button_center); btnRight = (TextView) mView.findViewById(R.id.button_right); btnDivider1 = (View) mView.findViewById(R.id.btn_divider1); btnDivider2 = (View) mView.findViewById(R.id.btn_divider2); msgBtnDivider = (View) mView.findViewById(R.id.msg_btn_divider); btnView = (LinearLayout) mView.findViewById(R.id.btn_view); if ((title != null) || (icon != null)) { mTitle.setVisibility(View.VISIBLE); mTitle.setText(title); mTitle.setTextSize(titleSize); mTitle.setTextColor(titleColor); if (titleColorStateList != null) { mTitle.setTextColor(titleColorStateList); } mTitle.setCompoundDrawables(icon, null, null, null); mTitleBar.setGravity(titlebarGravity); } else { mTitle.setVisibility(View.GONE); } if (message != null) { mMessage.setVisibility(View.VISIBLE); mMessage.setText(message); mMessage.setTextSize(messageSize); mMessage.setTextColor(messageColor); if (messageColorStateList != null) { mMessage.setTextColor(messageColorStateList); } } else { mMessage.setVisibility(View.GONE); } if (view != null) { addView.removeAllViews(); addView.addView(view); addView.setGravity(Gravity.CENTER); } int btnCountFlag = button1Flag + button2Flag + button3Flag; switch (btnCountFlag) { //one button case 1: case 5: btnCenter.setVisibility(View.VISIBLE); btnLeft.setVisibility(View.GONE); btnRight.setVisibility(View.GONE); btnCenter.setBackgroundResource(R.drawable.fynn_prompt_dialog_btn_single_selector); if (button1Text != null) { btnCenter.setText(button1Text); btnCenter.setTextSize(button1Size); btnCenter.setTextColor(button1TextColor); if (button1ColorStateList != null) { btnCenter.setTextColor(button1ColorStateList); } if (button1Listener != null) { btnCenter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { button1Listener.onClick(dialog, BUTTON_1); } }); } } break; case 3: //two button btnLeft.setVisibility(View.VISIBLE); btnRight.setVisibility(View.VISIBLE); btnCenter.setVisibility(View.GONE); btnDivider1.setVisibility(View.VISIBLE); btnDivider2.setVisibility(View.GONE); if (button1Text != null) { btnLeft.setText(button1Text); btnLeft.setTextSize(button1Size); btnLeft.setTextColor(button1TextColor); if (button1ColorStateList != null) { btnLeft.setTextColor(button1ColorStateList); } if (button1Listener != null) { btnLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { button1Listener.onClick(dialog, BUTTON_1); } }); } } if (button2Text != null) { btnRight.setText(button2Text); btnRight.setTextSize(button2Size); btnRight.setTextColor(button2TextColor); if (button2ColorStateList != null) { btnRight.setTextColor(button2ColorStateList); } if (button2Listener != null) { btnRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { button2Listener.onClick(dialog, BUTTON_2); } }); } } break; case 7: //three button btnLeft.setVisibility(View.VISIBLE); btnCenter.setVisibility(View.VISIBLE); btnRight.setVisibility(View.VISIBLE); btnDivider1.setVisibility(View.VISIBLE); btnDivider2.setVisibility(View.VISIBLE); if (button1Text != null) { btnLeft.setText(button1Text); btnLeft.setTextSize(button1Size); btnLeft.setTextColor(button1TextColor); if (button1ColorStateList != null) { btnLeft.setTextColor(button1ColorStateList); } if (button1Listener != null) { btnLeft.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { button1Listener.onClick(dialog, BUTTON_1); } }); } } if (button2Text != null) { btnCenter.setText(button2Text); btnCenter.setText(button2Text); btnCenter.setTextSize(button2Size); btnCenter.setTextColor(button2TextColor); if (button2ColorStateList != null) { btnCenter.setTextColor(button2ColorStateList); } if (button2Listener != null) { btnCenter.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { button2Listener.onClick(dialog, BUTTON_2); } }); } } if (button3Text != null) { btnRight.setText(button3Text); btnRight.setTextSize(button3Size); btnRight.setTextColor(button3TextColor); if (button3ColorStateList != null) { btnRight.setTextColor(button3ColorStateList); } if (button3Listener != null) { btnRight.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { button3Listener.onClick(dialog, BUTTON_3); } }); } } break; default: btnView.setVisibility(View.GONE); msgBtnDivider.setVisibility(View.GONE); break; } dialog.setCancelable(cancelable); dialog.setCanceledOnTouchOutside(canceledOnTouchOutside); dialog.setContentView(mView); return dialog; } public PromptDialog show() { create().show(); return dialog; } } public interface OnClickListener { void onClick(Dialog dialog, int which); } }