diff options
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/widget/RelativeLayout.java | 41 |
1 files changed, 25 insertions, 16 deletions
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java index 6a561e61057d..4dfa7db793b2 100644 --- a/core/java/android/widget/RelativeLayout.java +++ b/core/java/android/widget/RelativeLayout.java @@ -676,33 +676,42 @@ public class RelativeLayout extends ViewGroup { child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } - private void measureChildHorizontal(View child, LayoutParams params, int myWidth, int myHeight) { - int childWidthMeasureSpec = getChildMeasureSpec(params.mLeft, - params.mRight, params.width, - params.leftMargin, params.rightMargin, - mPaddingLeft, mPaddingRight, + private void measureChildHorizontal( + View child, LayoutParams params, int myWidth, int myHeight) { + final int childWidthMeasureSpec = getChildMeasureSpec(params.mLeft, params.mRight, + params.width, params.leftMargin, params.rightMargin, mPaddingLeft, mPaddingRight, myWidth); - int maxHeight = myHeight; - if (mMeasureVerticalWithPaddingMargin) { - maxHeight = Math.max(0, myHeight - mPaddingTop - mPaddingBottom - - params.topMargin - params.bottomMargin); - } - int childHeightMeasureSpec; + + final int childHeightMeasureSpec; if (myHeight < 0 && !mAllowBrokenMeasureSpecs) { if (params.height >= 0) { childHeightMeasureSpec = MeasureSpec.makeMeasureSpec( params.height, MeasureSpec.EXACTLY); } else { - // Negative values in a mySize/myWidth/myWidth value in RelativeLayout measurement - // is code for, "we got an unspecified mode in the RelativeLayout's measurespec." + // Negative values in a mySize/myWidth/myWidth value in + // RelativeLayout measurement is code for, "we got an + // unspecified mode in the RelativeLayout's measure spec." // Carry it forward. childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); } - } else if (params.width == LayoutParams.MATCH_PARENT) { - childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.EXACTLY); } else { - childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); + final int maxHeight; + if (mMeasureVerticalWithPaddingMargin) { + maxHeight = Math.max(0, myHeight - mPaddingTop - mPaddingBottom + - params.topMargin - params.bottomMargin); + } else { + maxHeight = Math.max(0, myHeight); + } + + final int heightMode; + if (params.width == LayoutParams.MATCH_PARENT) { + heightMode = MeasureSpec.EXACTLY; + } else { + heightMode = MeasureSpec.AT_MOST; + } + childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, heightMode); } + child.measure(childWidthMeasureSpec, childHeightMeasureSpec); } |
