diff --git a/flexbox/src/androidTest/java/com/google/android/flexbox/FlexboxHelperTest.kt b/flexbox/src/androidTest/java/com/google/android/flexbox/FlexboxHelperTest.kt index 4b1443004c624f28633ac6739af0ea60f983803a..1ada3efb49d49786b8d11bdd20b30588fa9963a3 100644 --- a/flexbox/src/androidTest/java/com/google/android/flexbox/FlexboxHelperTest.kt +++ b/flexbox/src/androidTest/java/com/google/android/flexbox/FlexboxHelperTest.kt @@ -427,4 +427,43 @@ class FlexboxHelperTest { assertThat(flexboxHelper.extractHigherInt(combined), `is`(higher)) assertThat(flexboxHelper.extractLowerInt(combined), `is`(lower)) } + + @Test + fun testFlexLine_anyItemsHaveFlexGrow() { + val activity = activityRule.activity + val lp1 = FlexboxLayout.LayoutParams(100, 100).apply { + flexGrow = 1.0f + } + val view1 = View(activity) + view1.layoutParams = lp1 + val lp2 = FlexboxLayout.LayoutParams(100, 200) + val view2 = View(activity) + view2.layoutParams = lp2 + val lp3 = FlexboxLayout.LayoutParams(100, 300) + val view3 = View(activity) + view3.layoutParams = lp3 + val lp4 = FlexboxLayout.LayoutParams(100, 400).apply { + flexGrow = 2.0f + } + val view4 = View(activity) + view4.layoutParams = lp4 + flexContainer.apply { + addView(view1) + addView(view2) + addView(view3) + addView(view4) + flexDirection = FlexDirection.COLUMN + flexWrap = FlexWrap.WRAP + alignContent = AlignContent.STRETCH + } + val widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(1000, View.MeasureSpec.EXACTLY) + val heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(500, View.MeasureSpec.EXACTLY) + val result = FlexboxHelper.FlexLinesResult() + flexboxHelper.calculateVerticalFlexLines(result, widthMeasureSpec, heightMeasureSpec) + flexContainer.flexLines = result.mFlexLines + assertThat(flexContainer.flexLines.size, `is`(3)) + assertThat(flexContainer.flexLines[0].mAnyItemsHaveFlexGrow, `is`(true)) + assertThat(flexContainer.flexLines[1].mAnyItemsHaveFlexGrow, `is`(false)) + assertThat(flexContainer.flexLines[2].mAnyItemsHaveFlexGrow, `is`(true)) + } } diff --git a/flexbox/src/androidTest/java/com/google/android/flexbox/test/FlexboxAndroidTest.kt b/flexbox/src/androidTest/java/com/google/android/flexbox/test/FlexboxAndroidTest.kt index 7e5fef65c09288fafbde0658f4daf2a4fafaa410..301b2793e5717feaf936c2a364c9aca279904e80 100644 --- a/flexbox/src/androidTest/java/com/google/android/flexbox/test/FlexboxAndroidTest.kt +++ b/flexbox/src/androidTest/java/com/google/android/flexbox/test/FlexboxAndroidTest.kt @@ -833,6 +833,7 @@ class FlexboxAndroidTest { override fun apply(flexboxLayout: FlexboxLayout) { flexboxLayout.justifyContent = JustifyContent.FLEX_END flexboxLayout.flexDirection = FlexDirection.COLUMN + flexboxLayout.alignItems = AlignItems.STRETCH } }) diff --git a/flexbox/src/androidTest/res/layout/activity_stretch_test.xml b/flexbox/src/androidTest/res/layout/activity_stretch_test.xml index fa2e3b6ccace0d9c869518e2dcc1f39b16abf53f..78496cf2302c321def56e92e06d3044cfb33898a 100644 --- a/flexbox/src/androidTest/res/layout/activity_stretch_test.xml +++ b/flexbox/src/androidTest/res/layout/activity_stretch_test.xml @@ -20,7 +20,8 @@ android:layout_height="360dp" app:flexDirection="row" app:flexWrap="wrap" - app:alignItems="stretch"> + app:alignItems="stretch" + app:alignContent="stretch" > flexLines = mFlexContainer.getFlexLinesInternal(); for (int i = flexLineIndex, size = flexLines.size(); i < size; i++) { FlexLine flexLine = flexLines.get(i); - if (flexLine.mMainSize < mainSize) { + if (flexLine.mMainSize < mainSize && flexLine.mAnyItemsHaveFlexGrow) { expandFlexItems(widthMeasureSpec, heightMeasureSpec, flexLine, mainSize, paddingAlongMainAxis, false); - } else { + } else if (flexLine.mMainSize > mainSize && flexLine.mAnyItemsHaveFlexShrink) { shrinkFlexItems(widthMeasureSpec, heightMeasureSpec, flexLine, mainSize, paddingAlongMainAxis, false); } @@ -1571,7 +1577,7 @@ class FlexboxHelper { /** * Expand the view if the {@link FlexContainer#getAlignItems()} attribute is set to {@link - * AlignItems#STRETCH} or {@link FlexboxLayout.LayoutParams#mAlignSelf} is set as + * AlignItems#STRETCH} or {@link FlexItem#getAlignSelf()} is set as * {@link AlignItems#STRETCH}. * * @param fromIndex the index from which value, stretch is calculated @@ -1579,7 +1585,7 @@ class FlexboxHelper { * @see FlexContainer#setFlexDirection(int) * @see FlexContainer#getAlignItems() * @see FlexContainer#setAlignItems(int) - * @see FlexboxLayout.LayoutParams#mAlignSelf + * @see FlexItem#getAlignSelf() */ void stretchViews(int fromIndex) { if (fromIndex >= mFlexContainer.getFlexItemCount()) { @@ -2008,6 +2014,7 @@ class FlexboxHelper { return index - another.index; } + @NonNull @Override public String toString() { return "Order{" + diff --git a/flexbox/src/main/java/com/google/android/flexbox/FlexboxLayout.java b/flexbox/src/main/java/com/google/android/flexbox/FlexboxLayout.java index 269e8cdcd760802a590a266d089a228bdddd7896..10a12f60f9c5f440b3a2a2d7f631cf4aa9165df3 100644 --- a/flexbox/src/main/java/com/google/android/flexbox/FlexboxLayout.java +++ b/flexbox/src/main/java/com/google/android/flexbox/FlexboxLayout.java @@ -102,7 +102,7 @@ public class FlexboxLayout extends ViewGroup implements FlexContainer { /** * The current value of the {@link AlignItems}, the default value is - * {@link AlignItems#STRETCH}. + * {@link AlignItems#FLEX_START}. * * @see AlignItems */ @@ -110,7 +110,7 @@ public class FlexboxLayout extends ViewGroup implements FlexContainer { /** * The current value of the {@link AlignContent}, the default value is - * {@link AlignContent#STRETCH}. + * {@link AlignContent#FLEX_START}. * * @see AlignContent */ @@ -223,8 +223,8 @@ public class FlexboxLayout extends ViewGroup implements FlexContainer { mFlexWrap = a.getInt(R.styleable.FlexboxLayout_flexWrap, FlexWrap.NOWRAP); mJustifyContent = a .getInt(R.styleable.FlexboxLayout_justifyContent, JustifyContent.FLEX_START); - mAlignItems = a.getInt(R.styleable.FlexboxLayout_alignItems, AlignItems.STRETCH); - mAlignContent = a.getInt(R.styleable.FlexboxLayout_alignContent, AlignContent.STRETCH); + mAlignItems = a.getInt(R.styleable.FlexboxLayout_alignItems, AlignItems.FLEX_START); + mAlignContent = a.getInt(R.styleable.FlexboxLayout_alignContent, AlignContent.FLEX_START); mMaxLine = a.getInt(R.styleable.FlexboxLayout_maxLine, NOT_SET); Drawable drawable = a.getDrawable(R.styleable.FlexboxLayout_dividerDrawable); if (drawable != null) {