Merge "Revert RelativeLayout's baseline view to API 22 and below behavior"
This commit is contained in:
committed by
Android (Google) Code Review
commit
7d6bc4f022
@@ -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,24 +633,23 @@ 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
|
||||
|
||||
Reference in New Issue
Block a user