@Override protected void onLayout(boolean changed, final int l, int t, final int r, int b) { if (isVisible(mTitleBar)) { int height = mTitleBar.getMeasuredHeight(); mTitleBar.layout(l, t, r, t + height); t += height; } else if (!mNoTitleNoPadding && mUseFullPadding) { t += mNoTitlePaddingFull; } if (isVisible(mContent)) mContent.layout(l, t, r, t + mContent.getMeasuredHeight()); if (mIsStacked) { b -= mButtonPaddingFull; for (MDButton mButton : mButtons) { if (isVisible(mButton)) { mButton.layout(l, b - mButton.getMeasuredHeight(), r, b); b -= mButton.getMeasuredHeight(); } } } else { int barTop; int barBottom = b; if (mUseFullPadding) barBottom -= mButtonPaddingFull; barTop = barBottom - mButtonBarHeight; /* START: Neutral Negative Positive CENTER: Negative Neutral Positive END: Positive Negative Neutral (With no Positive, Negative takes it's place except for CENTER) */ int offset = mButtonHorizontalEdgeMargin; /* Used with CENTER gravity */ int neutralLeft = -1; int neutralRight = -1; if (isVisible(mButtons[INDEX_POSITIVE])) { int bl, br; if (mButtonGravity == GravityEnum.END) { bl = l + offset; br = bl + mButtons[INDEX_POSITIVE].getMeasuredWidth(); } else { /* START || CENTER */ br = r - offset; bl = br - mButtons[INDEX_POSITIVE].getMeasuredWidth(); neutralRight = bl; } mButtons[INDEX_POSITIVE].layout(bl, barTop, br, barBottom); offset += mButtons[INDEX_POSITIVE].getMeasuredWidth(); } if (isVisible(mButtons[INDEX_NEGATIVE])) { int bl, br; if (mButtonGravity == GravityEnum.END) { bl = l + offset; br = bl + mButtons[INDEX_NEGATIVE].getMeasuredWidth(); } else if (mButtonGravity == GravityEnum.START) { br = r - offset; bl = br - mButtons[INDEX_NEGATIVE].getMeasuredWidth(); } else { /* CENTER */ bl = l + mButtonHorizontalEdgeMargin; br = bl + mButtons[INDEX_NEGATIVE].getMeasuredWidth(); neutralLeft = br; } mButtons[INDEX_NEGATIVE].layout(bl, barTop, br, barBottom); } if (isVisible(mButtons[INDEX_NEUTRAL])) { int bl, br; if (mButtonGravity == GravityEnum.END) { br = r - mButtonHorizontalEdgeMargin; bl = br - mButtons[INDEX_NEUTRAL].getMeasuredWidth(); } else if (mButtonGravity == GravityEnum.START) { bl = l + mButtonHorizontalEdgeMargin; br = bl + mButtons[INDEX_NEUTRAL].getMeasuredWidth(); } else { /* CENTER */ if (neutralLeft == -1 && neutralRight != -1) { neutralLeft = neutralRight - mButtons[INDEX_NEUTRAL].getMeasuredWidth(); } else if (neutralRight == -1 && neutralLeft != -1) { neutralRight = neutralLeft + mButtons[INDEX_NEUTRAL].getMeasuredWidth(); } else if (neutralRight == -1) { neutralLeft = (r - l) / 2 - mButtons[INDEX_NEUTRAL].getMeasuredWidth() / 2; neutralRight = neutralLeft + mButtons[INDEX_NEUTRAL].getMeasuredWidth(); } bl = neutralLeft; br = neutralRight; } mButtons[INDEX_NEUTRAL].layout(bl, barTop, br, barBottom); } } setUpDividersVisibility(mContent, true, true); }