@Override public void draw(Canvas canvas) { super.draw(canvas); if(mShowDivider && (mPositiveAction.getVisibility() == View.VISIBLE || mNegativeAction.getVisibility() == View.VISIBLE || mNeutralAction.getVisibility() == View.VISIBLE)) canvas.drawLine(getPaddingLeft(), mDividerPos, getWidth() - getPaddingRight(), mDividerPos, mDividerPaint); }
int height; if(mAction.getVisibility() == View.VISIBLE){ mAction.measure(MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED), heightMeasureSpec); int padding = mIsRtl ? mText.getPaddingLeft() : mText.getPaddingRight();
int positiveActionWidth = 0; if(mPositiveAction.getVisibility() == View.VISIBLE){ widthMs = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); heightMs = View.MeasureSpec.makeMeasureSpec(mActionHeight, View.MeasureSpec.EXACTLY); if(mNegativeAction.getVisibility() == View.VISIBLE){ widthMs = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); heightMs = View.MeasureSpec.makeMeasureSpec(mActionHeight, View.MeasureSpec.EXACTLY); if(mNeutralAction.getVisibility() == View.VISIBLE){ widthMs = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); heightMs = View.MeasureSpec.makeMeasureSpec(mActionHeight, View.MeasureSpec.EXACTLY);
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;
@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); }