/** * Set a listener will be called when negative action button is clicked. * @param listener The {@link View.OnClickListener} will be called. * @return The Dialog for chaining methods. */ public Dialog negativeActionClickListener(View.OnClickListener listener){ mNegativeAction.setOnClickListener(listener); return this; }
/** * Set the text of neutral action button. * @param action * @return The Dialog for chaining methods. */ public Dialog neutralAction(CharSequence action){ mNeutralAction.setText(action); mNeutralAction.setVisibility(TextUtils.isEmpty(action) ? View.GONE : View.VISIBLE); return this; }
public void applyStyle(int resId){ ViewUtil.applyStyle(this, resId); applyStyle(getContext(), null, 0, resId); }
/** * Set the horizontal padding between this SnackBar and it's text and button. * @param padding * @return This SnackBar for chaining methods. */ public SnackBar horizontalPadding(int padding){ mText.setPadding(padding, mText.getPaddingTop(), padding, mText.getPaddingBottom()); mAction.setPadding(padding, mAction.getPaddingTop(), padding, mAction.getPaddingBottom()); return this; }
@Override protected void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes){ mWidth = MATCH_PARENT; mHeight = WRAP_CONTENT; mDuration = -1; mIsRtl = false; mText = new TextView(context); mText.setSingleLine(true); mText.setGravity(Gravity.START | Gravity.CENTER_VERTICAL); addView(mText, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mAction = new Button(context); mAction.setBackgroundResource(0); mAction.setGravity(Gravity.CENTER); mAction.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (mActionClickListener != null) mActionClickListener.onActionClick(SnackBar.this, mActionId); dismiss(); } }); addView(mAction, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); mBackground = new BackgroundDrawable(); mBackground.setColor(0xFF323232); ViewUtil.setBackground(this, mBackground); setClickable(true); super.init(context, attrs, defStyleAttr, defStyleRes); }
int height; if(mAction.getVisibility() == View.VISIBLE){ mAction.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), heightMeasureSpec); int padding = mIsRtl ? mText.getPaddingLeft() : mText.getPaddingRight(); mText.measure(MeasureSpec.makeMeasureSpec(widthSize - (mAction.getMeasuredWidth() - padding), widthMode), heightMeasureSpec); width = mText.getMeasuredWidth() + mAction.getMeasuredWidth() - padding; height = Math.max(mText.getMeasuredHeight(), mAction.getMeasuredHeight());
mContainer = new ContainerFrameLayout(context); mTitle = new TextView(context); mPositiveAction = new Button(context); mNegativeAction = new Button(context); mNeutralAction = new Button(context); mTitle.setGravity(Gravity.START); mTitle.setPadding(mContentPadding, mContentPadding, mContentPadding, mContentPadding - mActionPadding); mPositiveAction.setId(ACTION_POSITIVE); mPositiveAction.setPadding(mActionPadding, 0, mActionPadding, 0); mPositiveAction.setBackgroundResource(0); mNegativeAction.setId(ACTION_NEGATIVE); mNegativeAction.setPadding(mActionPadding, 0, mActionPadding, 0); mNegativeAction.setBackgroundResource(0); mNeutralAction.setId(ACTION_NEUTRAL); mNeutralAction.setPadding(mActionPadding, 0, mActionPadding, 0); mNeutralAction.setBackgroundResource(0);
@Override protected void onLayout(boolean changed, int l, int t, int r, int b) { int childLeft = getPaddingLeft(); int childRight = r - l - getPaddingRight(); int childTop = getPaddingTop(); int childBottom = b - t - getPaddingBottom(); if(mAction.getVisibility() == View.VISIBLE){ if(mIsRtl) { mAction.layout(childLeft, childTop, childLeft + mAction.getMeasuredWidth(), childBottom); childLeft += mAction.getMeasuredWidth() - mText.getPaddingLeft(); } else { mAction.layout(childRight - mAction.getMeasuredWidth(), childTop, childRight, childBottom); childRight -= mAction.getMeasuredWidth() - mText.getPaddingRight(); } } mText.layout(childLeft, childTop, childRight, childBottom); }
private void resetDownloadButton() { mButton.setText(getString(R.string.download)); mButton.setClickable(true); mArcProgress.setProgress(0); }
/** * Set the vertical padding between this SnackBar and it's text and button. * @param padding * @return This SnackBar for chaining methods. */ public SnackBar verticalPadding(int padding){ mText.setPadding(mText.getPaddingLeft(), padding, mText.getPaddingRight(), padding); mAction.setPadding(mAction.getPaddingLeft(), padding, mAction.getPaddingRight(), padding); return this; }
@Override public void setOnClickListener(OnClickListener l) { RippleManager rippleManager = getRippleManager(); if (l == rippleManager) super.setOnClickListener(l); else { rippleManager.setOnClickListener(l); setOnClickListener(rippleManager); } }
if(mPositiveAction.getVisibility() == View.VISIBLE){ widthMs = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); heightMs = View.MeasureSpec.makeMeasureSpec(mActionHeight, View.MeasureSpec.EXACTLY); mPositiveAction.measure(widthMs, heightMs); positiveActionWidth = mPositiveAction.getMeasuredWidth(); mPositiveAction.measure(View.MeasureSpec.makeMeasureSpec(mActionMinWidth, View.MeasureSpec.EXACTLY), heightMs); positiveActionWidth = mActionMinWidth; if(mNegativeAction.getVisibility() == View.VISIBLE){ widthMs = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); heightMs = View.MeasureSpec.makeMeasureSpec(mActionHeight, View.MeasureSpec.EXACTLY); mNegativeAction.measure(widthMs, heightMs); negativeActionWidth = mNegativeAction.getMeasuredWidth(); mNegativeAction.measure(View.MeasureSpec.makeMeasureSpec(mActionMinWidth, View.MeasureSpec.EXACTLY), heightMs); negativeActionWidth = mActionMinWidth; if(mNeutralAction.getVisibility() == View.VISIBLE){ widthMs = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); heightMs = View.MeasureSpec.makeMeasureSpec(mActionHeight, View.MeasureSpec.EXACTLY); mNeutralAction.measure(widthMs, heightMs); neutralActionWidth = mNeutralAction.getMeasuredWidth(); mNeutralAction.measure(View.MeasureSpec.makeMeasureSpec(mActionMinWidth, View.MeasureSpec.EXACTLY), heightMs); neutralActionWidth = mActionMinWidth;
protected void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes){ ViewUtil.applyFont(this, attrs, defStyleAttr, defStyleRes); applyStyle(context, attrs, defStyleAttr, defStyleRes); if(!isInEditMode()) mStyleId = ThemeManager.getStyleId(context, attrs, defStyleAttr, defStyleRes); }
@Override public void onThemeChanged(ThemeManager.OnThemeChangedEvent event) { int style = ThemeManager.getInstance().getCurrentStyle(mStyleId); if(mCurrentStyle != style){ mCurrentStyle = style; applyStyle(mCurrentStyle); } }
@Override public void setBackgroundDrawable(Drawable drawable) { Drawable background = getBackground(); if(background instanceof RippleDrawable && !(drawable instanceof RippleDrawable)) ((RippleDrawable) background).setBackgroundDrawable(drawable); else super.setBackgroundDrawable(drawable); }
boolean hasAction = mNeutralAction.getVisibility() == View.VISIBLE || mNegativeAction.getVisibility() == View.VISIBLE || mPositiveAction.getVisibility() == View.VISIBLE; if(hasAction) childBottom -= mActionPadding; if(mNeutralAction.getVisibility() == View.VISIBLE){ mNeutralAction.layout(childRight - mActionOuterPadding - mNeutralAction.getMeasuredWidth(), childBottom - mActionOuterHeight + temp, childRight - mActionOuterPadding, childBottom - temp); childBottom -= mActionOuterHeight; if(mNegativeAction.getVisibility() == View.VISIBLE){ mNegativeAction.layout(childRight - mActionOuterPadding - mNegativeAction.getMeasuredWidth(), childBottom - mActionOuterHeight + temp, childRight - mActionOuterPadding, childBottom - temp); childBottom -= mActionOuterHeight; if(mPositiveAction.getVisibility() == View.VISIBLE){ mPositiveAction.layout(childRight - mActionOuterPadding - mPositiveAction.getMeasuredWidth(), childBottom - mActionOuterHeight + temp, childRight - mActionOuterPadding, childBottom - temp); childBottom -= mActionOuterHeight; if (mPositiveAction.getVisibility() == View.VISIBLE) { mPositiveAction.layout(actionLeft , actionTop, actionLeft + mPositiveAction.getMeasuredWidth(), actionBottom); actionLeft += mPositiveAction.getMeasuredWidth() + mActionPadding; if (mNegativeAction.getVisibility() == View.VISIBLE) mNegativeAction.layout(actionLeft, actionTop, actionLeft + mNegativeAction.getMeasuredWidth(), actionBottom); if (mNeutralAction.getVisibility() == View.VISIBLE) mNeutralAction.layout(actionRight - mNeutralAction.getMeasuredWidth(), actionTop, actionRight, actionBottom); if (mPositiveAction.getVisibility() == View.VISIBLE) { mPositiveAction.layout(actionRight - mPositiveAction.getMeasuredWidth(), actionTop, actionRight, actionBottom); actionRight -= mPositiveAction.getMeasuredWidth() + mActionPadding;
@OnClick(R.id.button_download) void download() { mButton.setText(getString(R.string.downloading)); mButton.setClickable(false);
/** * Set the text of negative action button. * @param action * @return The Dialog for chaining methods. */ public Dialog negativeAction(CharSequence action){ mNegativeAction.setText(action); mNegativeAction.setVisibility(TextUtils.isEmpty(action) ? View.GONE : View.VISIBLE); return this; }
/** * Set a listener will be called when positive action button is clicked. * @param listener The {@link View.OnClickListener} will be called. * @return The Dialog for chaining methods. */ public Dialog positiveActionClickListener(View.OnClickListener listener){ mPositiveAction.setOnClickListener(listener); return this; }
/** * Set the text of positive action button. * @param action * @return The Dialog for chaining methods. */ public Dialog positiveAction(CharSequence action){ mPositiveAction.setText(action); mPositiveAction.setVisibility(TextUtils.isEmpty(action) ? View.GONE : View.VISIBLE); return this; }