package cn.qqtheme.framework.popup; import android.app.Activity; import android.graphics.Color; import android.support.annotation.ColorInt; import android.support.annotation.IntRange; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.StringRes; import android.text.TextUtils; import android.view.Gravity; import android.view.View; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; import cn.qqtheme.framework.util.ConvertUtils; /** * 带确定及取消按钮的弹窗 * * @author 李玉江[QQ:1032694760] * @since 2015/10/21 */ public abstract class ConfirmPopup<V extends View> extends BasicPopup<View> { protected boolean topLineVisible = true; protected int topLineColor = 0xFF33B5E5; protected int topLineHeightPixels = 1;//px protected int topBackgroundColor = Color.WHITE; protected int topHeight = 40;//dp protected int topPadding = 15;//dp protected boolean cancelVisible = true; protected CharSequence cancelText = ""; protected CharSequence submitText = ""; protected CharSequence titleText = ""; protected int cancelTextColor = 0xFF33B5E5; protected int submitTextColor = 0xFF33B5E5; protected int titleTextColor = Color.BLACK; protected int pressedTextColor = 0XFF0288CE; protected int cancelTextSize = 0; protected int submitTextSize = 0; protected int titleTextSize = 0; protected int backgroundColor = Color.WHITE; private TextView cancelButton, submitButton; private View titleView; private View headerView,footerView; public ConfirmPopup(Activity activity) { super(activity); cancelText = activity.getString(android.R.string.cancel); submitText = activity.getString(android.R.string.ok); } /** * 设置顶部标题栏下划线颜色 */ public void setTopLineColor(@ColorInt int topLineColor) { this.topLineColor = topLineColor; } /** * 设置顶部标题栏下划线高度,单位为px */ public void setTopLineHeight(int topLineHeightPixels) { this.topLineHeightPixels = topLineHeightPixels; } /** * 设置顶部标题栏背景颜色 */ public void setTopBackgroundColor(@ColorInt int topBackgroundColor) { this.topBackgroundColor = topBackgroundColor; } /** * 设置顶部标题栏高度(单位为dp) */ public void setTopHeight(@IntRange(from = 10, to = 80) int topHeight) { this.topHeight = topHeight; } /** * 设置顶部按钮左边及右边边距(单位为dp) */ public void setTopPadding(int topPadding) { this.topPadding = topPadding; } /** * 设置顶部标题栏下划线是否显示 */ public void setTopLineVisible(boolean topLineVisible) { this.topLineVisible = topLineVisible; } /** * 设置顶部标题栏取消按钮是否显示 */ public void setCancelVisible(boolean cancelVisible) { if (null != cancelButton) { cancelButton.setVisibility(cancelVisible ? View.VISIBLE : View.GONE); } else { this.cancelVisible = cancelVisible; } } /** * 设置顶部标题栏取消按钮文字 */ public void setCancelText(CharSequence cancelText) { if (null != cancelButton) { cancelButton.setText(cancelText); } else { this.cancelText = cancelText; } } /** * 设置顶部标题栏取消按钮文字 */ public void setCancelText(@StringRes int textRes) { setCancelText(activity.getString(textRes)); } /** * 设置顶部标题栏确定按钮文字 */ public void setSubmitText(CharSequence submitText) { if (null != submitButton) { submitButton.setText(submitText); } else { this.submitText = submitText; } } /** * 设置顶部标题栏确定按钮文字 */ public void setSubmitText(@StringRes int textRes) { setSubmitText(activity.getString(textRes)); } /** * 设置顶部标题栏标题文字 */ public void setTitleText(CharSequence titleText) { if (titleView != null && titleView instanceof TextView) { ((TextView) titleView).setText(titleText); } else { this.titleText = titleText; } } /** * 设置顶部标题栏标题文字 */ public void setTitleText(@StringRes int textRes) { setTitleText(activity.getString(textRes)); } /** * 设置顶部标题栏取消按钮文字颜色 */ public void setCancelTextColor(@ColorInt int cancelTextColor) { if (null != cancelButton) { cancelButton.setTextColor(cancelTextColor); } else { this.cancelTextColor = cancelTextColor; } } /** * 设置顶部标题栏确定按钮文字颜色 */ public void setSubmitTextColor(@ColorInt int submitTextColor) { if (null != submitButton) { submitButton.setTextColor(submitTextColor); } else { this.submitTextColor = submitTextColor; } } /** * 设置顶部标题栏标题文字颜色 */ public void setTitleTextColor(@ColorInt int titleTextColor) { if (null != titleView && titleView instanceof TextView) { ((TextView) titleView).setTextColor(titleTextColor); } else { this.titleTextColor = titleTextColor; } } /** * 设置按下时的文字颜色 */ public void setPressedTextColor(int pressedTextColor) { this.pressedTextColor = pressedTextColor; } /** * 设置顶部标题栏取消按钮文字大小(单位为sp) */ public void setCancelTextSize(@IntRange(from = 10, to = 40) int cancelTextSize) { this.cancelTextSize = cancelTextSize; } /** * 设置顶部标题栏确定按钮文字大小(单位为sp) */ public void setSubmitTextSize(@IntRange(from = 10, to = 40) int submitTextSize) { this.submitTextSize = submitTextSize; } /** * 设置顶部标题栏标题文字大小(单位为sp) */ public void setTitleTextSize(@IntRange(from = 10, to = 40) int titleTextSize) { this.titleTextSize = titleTextSize; } /** * 设置选择器主体背景颜色 */ public void setBackgroundColor(@ColorInt int backgroundColor) { this.backgroundColor = backgroundColor; } public void setTitleView(View titleView) { this.titleView = titleView; } public View getTitleView() { if (null == titleView) { throw new NullPointerException("please call show at first"); } return titleView; } public TextView getCancelButton() { if (null == cancelButton) { throw new NullPointerException("please call show at first"); } return cancelButton; } public TextView getSubmitButton() { if (null == submitButton) { throw new NullPointerException("please call show at first"); } return submitButton; } public void setHeaderView(View headerView) { this.headerView = headerView; } public void setFooterView(View footerView) { this.footerView = footerView; } /** * @see #makeHeaderView() * @see #makeCenterView() * @see #makeFooterView() */ @Override protected final View makeContentView() { LinearLayout rootLayout = new LinearLayout(activity); rootLayout.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)); rootLayout.setBackgroundColor(backgroundColor); rootLayout.setOrientation(LinearLayout.VERTICAL); rootLayout.setGravity(Gravity.CENTER); rootLayout.setPadding(0, 0, 0, 0); rootLayout.setClipToPadding(false); View headerView = makeHeaderView(); if (headerView != null) { rootLayout.addView(headerView); } if (topLineVisible) { View lineView = new View(activity); lineView.setLayoutParams(new LinearLayout.LayoutParams(MATCH_PARENT, topLineHeightPixels)); lineView.setBackgroundColor(topLineColor); rootLayout.addView(lineView); } rootLayout.addView(makeCenterView(), new LinearLayout.LayoutParams(MATCH_PARENT, 0, 1.0f)); View footerView = makeFooterView(); if (footerView != null) { rootLayout.addView(footerView); } return rootLayout; } @Nullable protected View makeHeaderView() { if (null != headerView) { return headerView; } RelativeLayout topButtonLayout = new RelativeLayout(activity); int height = ConvertUtils.toPx(activity, topHeight); topButtonLayout.setLayoutParams(new RelativeLayout.LayoutParams(MATCH_PARENT, height)); topButtonLayout.setBackgroundColor(topBackgroundColor); topButtonLayout.setGravity(Gravity.CENTER_VERTICAL); cancelButton = new TextView(activity); cancelButton.setVisibility(cancelVisible ? View.VISIBLE : View.GONE); RelativeLayout.LayoutParams cancelParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT); cancelParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE); cancelParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); cancelButton.setLayoutParams(cancelParams); cancelButton.setBackgroundColor(Color.TRANSPARENT); cancelButton.setGravity(Gravity.CENTER); int padding = ConvertUtils.toPx(activity, topPadding); cancelButton.setPadding(padding, 0, padding, 0); if (!TextUtils.isEmpty(cancelText)) { cancelButton.setText(cancelText); } cancelButton.setTextColor(ConvertUtils.toColorStateList(cancelTextColor, pressedTextColor)); if (cancelTextSize != 0) { cancelButton.setTextSize(cancelTextSize); } cancelButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); onCancel(); } }); topButtonLayout.addView(cancelButton); if (null == titleView) { TextView textView = new TextView(activity); RelativeLayout.LayoutParams titleParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT); int margin = ConvertUtils.toPx(activity, topPadding); titleParams.leftMargin = margin; titleParams.rightMargin = margin; titleParams.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE); titleParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); textView.setLayoutParams(titleParams); textView.setGravity(Gravity.CENTER); if (!TextUtils.isEmpty(titleText)) { textView.setText(titleText); } textView.setTextColor(titleTextColor); if (titleTextSize != 0) { textView.setTextSize(titleTextSize); } titleView = textView; } topButtonLayout.addView(titleView); submitButton = new TextView(activity); RelativeLayout.LayoutParams submitParams = new RelativeLayout.LayoutParams(WRAP_CONTENT, MATCH_PARENT); submitParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE); submitParams.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE); submitButton.setLayoutParams(submitParams); submitButton.setBackgroundColor(Color.TRANSPARENT); submitButton.setGravity(Gravity.CENTER); submitButton.setPadding(padding, 0, padding, 0); if (!TextUtils.isEmpty(submitText)) { submitButton.setText(submitText); } submitButton.setTextColor(ConvertUtils.toColorStateList(submitTextColor, pressedTextColor)); if (submitTextSize != 0) { submitButton.setTextSize(submitTextSize); } submitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dismiss(); onSubmit(); } }); topButtonLayout.addView(submitButton); return topButtonLayout; } @NonNull protected abstract V makeCenterView(); @Nullable protected View makeFooterView() { if (null != footerView) { return footerView; } return null; } protected void onSubmit() { } protected void onCancel() { } }