summaryrefslogtreecommitdiff
path: root/core/java/android/widget/LinearLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/widget/LinearLayout.java')
-rw-r--r--core/java/android/widget/LinearLayout.java30
1 files changed, 24 insertions, 6 deletions
diff --git a/core/java/android/widget/LinearLayout.java b/core/java/android/widget/LinearLayout.java
index 3ced25359397..d4df3e65437f 100644
--- a/core/java/android/widget/LinearLayout.java
+++ b/core/java/android/widget/LinearLayout.java
@@ -730,6 +730,7 @@ public class LinearLayout extends ViewGroup {
final int baselineChildIndex = mBaselineAlignedChildIndex;
final boolean useLargestChild = mUseLargestChild;
+ int lastWeightedChildIndex = -1;
int largestChildHeight = Integer.MIN_VALUE;
int consumedExcessSpace = 0;
@@ -754,8 +755,10 @@ public class LinearLayout extends ViewGroup {
}
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
- totalWeight += lp.weight;
+ if (lp.weight > 0) {
+ totalWeight += lp.weight;
+ lastWeightedChildIndex = i;
+ }
final boolean useExcessSpace = lp.height == 0 && lp.weight > 0;
if (heightMode == MeasureSpec.EXACTLY && useExcessSpace) {
@@ -909,7 +912,13 @@ public class LinearLayout extends ViewGroup {
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
final float childWeight = lp.weight;
if (childWeight > 0) {
- final int share = (int) (childWeight * remainingExcess / remainingWeightSum);
+ final int share;
+ if (i == lastWeightedChildIndex) {
+ share = remainingExcess;
+ } else {
+ share = (int) (childWeight * remainingExcess / remainingWeightSum);
+ }
+
remainingExcess -= share;
remainingWeightSum -= childWeight;
@@ -1070,6 +1079,7 @@ public class LinearLayout extends ViewGroup {
final boolean isExactly = widthMode == MeasureSpec.EXACTLY;
+ int lastWeightedChildIndex = -1;
int largestChildWidth = Integer.MIN_VALUE;
int usedExcessSpace = 0;
@@ -1094,8 +1104,10 @@ public class LinearLayout extends ViewGroup {
}
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
-
- totalWeight += lp.weight;
+ if (lp.weight > 0) {
+ totalWeight += lp.weight;
+ lastWeightedChildIndex = i;
+ }
final boolean useExcessSpace = lp.width == 0 && lp.weight > 0;
if (widthMode == MeasureSpec.EXACTLY && useExcessSpace) {
@@ -1294,7 +1306,13 @@ public class LinearLayout extends ViewGroup {
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
final float childWeight = lp.weight;
if (childWeight > 0) {
- final int share = (int) (childWeight * remainingExcess / remainingWeightSum);
+ final int share;
+ if (i == lastWeightedChildIndex) {
+ share = remainingExcess;
+ } else {
+ share = (int) (childWeight * remainingExcess / remainingWeightSum);
+ }
+
remainingExcess -= share;
remainingWeightSum -= childWeight;