summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAlan Viverette <alanv@google.com>2015-03-10 17:19:52 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-03-10 17:19:53 +0000
commit7d6bc4f022dba5583a29a40d9b43207cf7067692 (patch)
tree8d8824259f5fab78241b91b94c9d06c2b4fb2d8a /core
parent126d89bb79afb9636b79688e3d95fb2fc79ddd3b (diff)
parent0e14a8576845fa336836519f0fe356d17682238e (diff)
downloadframeworks_base-7d6bc4f022dba5583a29a40d9b43207cf7067692.zip
frameworks_base-7d6bc4f022dba5583a29a40d9b43207cf7067692.tar.gz
frameworks_base-7d6bc4f022dba5583a29a40d9b43207cf7067692.tar.bz2
Merge "Revert RelativeLayout's baseline view to API 22 and below behavior"
Diffstat (limited to 'core')
-rw-r--r--core/java/android/widget/RelativeLayout.java46
1 files changed, 31 insertions, 15 deletions
diff --git a/core/java/android/widget/RelativeLayout.java b/core/java/android/widget/RelativeLayout.java
index a224f5e..d12739f 100644
--- a/core/java/android/widget/RelativeLayout.java
+++ b/core/java/android/widget/RelativeLayout.java
@@ -515,6 +515,23 @@ public class RelativeLayout extends ViewGroup {
}
}
+ // Use the top-start-most laid out view as the baseline. RTL offsets are
+ // applied later, so we can use the left-most edge as the starting edge.
+ View baselineView = null;
+ LayoutParams baselineParams = null;
+ for (int i = 0; i < count; i++) {
+ final View child = getChildAt(i);
+ if (child.getVisibility() != GONE) {
+ final LayoutParams childParams = (LayoutParams) child.getLayoutParams();
+ if (baselineView == null || baselineParams == null
+ || compareLayoutPosition(childParams, baselineParams) < 0) {
+ baselineView = child;
+ baselineParams = childParams;
+ }
+ }
+ }
+ mBaselineView = baselineView;
+
if (isWrapContentWidth) {
// Width already has left padding in it since it was calculated by looking at
// the right of each child view
@@ -616,25 +633,24 @@ public class RelativeLayout extends ViewGroup {
}
}
- // Use the bottom-most laid out view as the baseline.
- View baselineView = null;
- int baseline = 0;
- for (int i = 0; i < count; i++) {
- final View child = getChildAt(i);
- if (child.getVisibility() != GONE) {
- final int childBaseline = child.getBaseline();
- if (childBaseline >= baseline) {
- baselineView = child;
- baseline = childBaseline;
- }
- }
- }
- mBaselineView = baselineView;
-
setMeasuredDimension(width, height);
}
/**
+ * @return a negative number if the top of {@code p1} is above the top of
+ * {@code p2} or if they have identical top values and the left of
+ * {@code p1} is to the left of {@code p2}, or a positive number
+ * otherwise
+ */
+ private int compareLayoutPosition(LayoutParams p1, LayoutParams p2) {
+ final int topDiff = p1.mTop - p2.mTop;
+ if (topDiff != 0) {
+ return topDiff;
+ }
+ return p1.mLeft - p2.mLeft;
+ }
+
+ /**
* Measure a child. The child should have left, top, right and bottom information
* stored in its LayoutParams. If any of these values is VALUE_NOT_SET it means
* that the view can extend up to the corresponding edge.