@Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int width = MeasureSpec.getSize(widthMeasureSpec); int height = MeasureSpec.getSize(heightMeasureSpec); mUseFullPadding = true; boolean hasButtons = false; final boolean stacked; if (!mForceStack) { int buttonsWidth = 0; for (MDButton button : mButtons) { if (button != null && isVisible(button)) { button.setStacked(false, false); measureChild(button, widthMeasureSpec, heightMeasureSpec); buttonsWidth += button.getMeasuredWidth(); hasButtons = true; } } int buttonBarPadding = getContext().getResources().getDimensionPixelSize(R.dimen.md_neutral_button_margin); final int buttonFrameWidth = width - 2 * buttonBarPadding; stacked = buttonsWidth > buttonFrameWidth; } else { stacked = true; } int stackedHeight = 0; mIsStacked = stacked; if (stacked) { for (MDButton button : mButtons) { if (button != null && isVisible(button)) { button.setStacked(true, false); measureChild(button, widthMeasureSpec, heightMeasureSpec); stackedHeight += button.getMeasuredHeight(); hasButtons = true; } } } int availableHeight = height; int fullPadding = 0; int minPadding = 0; if (hasButtons) { if (mIsStacked) { availableHeight -= stackedHeight; fullPadding += 2 * mButtonPaddingFull; minPadding += 2 * mButtonPaddingFull; } else { availableHeight -= mButtonBarHeight; fullPadding += 2 * mButtonPaddingFull; /* No minPadding */ } } else { /* Content has 8dp, we add 16dp and get 24dp, the frame margin */ fullPadding += 2 * mButtonPaddingFull; } if (isVisible(mTitleBar)) { mTitleBar.measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.UNSPECIFIED); availableHeight -= mTitleBar.getMeasuredHeight(); } else if (!mNoTitleNoPadding) { fullPadding += mNoTitlePaddingFull; } if (isVisible(mContent)) { mContent.measure( MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY), MeasureSpec.makeMeasureSpec(availableHeight - minPadding, MeasureSpec.AT_MOST)); if (mContent.getMeasuredHeight() <= availableHeight - fullPadding) { if (!mReducePaddingNoTitleNoButtons || isVisible(mTitleBar) || hasButtons) { mUseFullPadding = true; availableHeight -= mContent.getMeasuredHeight() + fullPadding; } else { mUseFullPadding = false; availableHeight -= mContent.getMeasuredHeight() + minPadding; } } else { mUseFullPadding = false; availableHeight = 0; } } setMeasuredDimension(width, height - availableHeight); }