diff options
| author | 2010-01-11 16:48:10 -0800 | |
|---|---|---|
| committer | 2010-01-11 16:48:10 -0800 | |
| commit | 5c7a5d08573d22877eb1138c7f2584ddb9f19bd5 (patch) | |
| tree | b90deb71782f5db64d4747e6b50805c18269b550 | |
| parent | bb4ad6a8a36b01a3ee6b8c40f256c8a9bf80b704 (diff) | |
| parent | 42460ac1bb5512a17a6891f7d99e2b45db0889d8 (diff) | |
Merge "Fix how RelativeLayout handles alignParentBottom/Right when dimension is wrap_content. Bug: #2194109."
| -rw-r--r-- | core/java/android/widget/RelativeLayout.java | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java index fad994b12a0a..1aa1df30afa0 100644 --- a/core/java/android/widget/RelativeLayout.java +++ b/core/java/android/widget/RelativeLayout.java @@ -291,6 +291,8 @@ public class RelativeLayout extends ViewGroup { } } + // TODO: we need to find another way to implement RelativeLayout + // This implementation cannot handle every case @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { if (mDirtyHierarchy) { @@ -438,6 +440,10 @@ public class RelativeLayout extends ViewGroup { final int[] rules = params.getRules(); if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_HORIZONTAL] != 0) { centerHorizontal(child, params, width); + } else if (rules[ALIGN_PARENT_RIGHT] != 0) { + final int childWidth = child.getMeasuredWidth(); + params.mLeft = width - mPaddingRight - childWidth; + params.mRight = params.mLeft + childWidth; } } } @@ -464,6 +470,10 @@ public class RelativeLayout extends ViewGroup { final int[] rules = params.getRules(); if (rules[CENTER_IN_PARENT] != 0 || rules[CENTER_VERTICAL] != 0) { centerVertical(child, params, height); + } else if (rules[ALIGN_PARENT_BOTTOM] != 0) { + final int childHeight = child.getMeasuredHeight(); + params.mTop = height - mPaddingBottom - childHeight; + params.mBottom = params.mTop + childHeight; } } } @@ -673,7 +683,7 @@ public class RelativeLayout extends ViewGroup { params.mRight = params.mLeft + child.getMeasuredWidth(); } } - return false; + return rules[ALIGN_PARENT_RIGHT] != 0; } private boolean positionChildVertical(View child, LayoutParams params, int myHeight, @@ -702,7 +712,7 @@ public class RelativeLayout extends ViewGroup { params.mBottom = params.mTop + child.getMeasuredHeight(); } } - return false; + return rules[ALIGN_PARENT_BOTTOM] != 0; } private void applyHorizontalSizeRules(LayoutParams childParams, int myWidth) { |