提交 3fd14340 编写于 作者: T Takeshi Hagikura 提交者: GitHub

Fix the issue that margins for items added programmatically were not taken into account. (#359)

上级 d1994f5a
......@@ -57,7 +57,7 @@ class FlexboxLayoutFragment : Fragment() {
flexContainer.addView(textView)
}
} else {
for (i in 0..flexContainer.flexItemCount - 1) {
for (i in 0 until flexContainer.flexItemCount) {
flexContainer.getFlexItemAt(i).setOnClickListener(
FlexItemClickListener(activity,
FlexItemChangedListenerImpl(flexContainer), i))
......
......@@ -3777,6 +3777,78 @@ class FlexboxAndroidTest {
onView(withId(R.id.text3)).check(isTopAlignedWith(withId(R.id.flexbox_layout)))
}
@Test
@FlakyTest
@Throws(Throwable::class)
fun testAddItemProgrammatically_withMarginLayoutParams() {
val activity = activityRule.activity
val flexboxLayout = createFlexboxLayout(R.layout.activity_empty_children,
object : Configuration {
override fun apply(flexboxLayout: FlexboxLayout) {
flexboxLayout.alignItems = AlignItems.FLEX_START
val first = createTextView(activity, "1", 0)
val second = createTextView(activity, "2", 0)
val lp1 = ViewGroup.MarginLayoutParams(100, 100)
lp1.setMargins(10, 10, 10, 10)
val lp2 = ViewGroup.MarginLayoutParams(100, 100)
lp2.setMargins(20, 20, 20, 20)
first.layoutParams = lp1
second.layoutParams = lp2
flexboxLayout.addView(first)
flexboxLayout.addView(second)
}
})
assertThat(flexboxLayout.childCount, `is`(2))
val view1 = flexboxLayout.getChildAt(0)
val view2 = flexboxLayout.getChildAt(1)
// Assert the coordinates of the views added programmatically with margins
assertThat(view1.left, `is`(10))
assertThat(view1.top, `is`(10))
assertThat(view1.bottom, `is`(110))
assertThat(view1.right, `is`(110))
assertThat(view2.left, `is`(140))
assertThat(view2.top, `is`(20))
assertThat(view2.bottom, `is`(120))
assertThat(view2.right, `is`(240))
}
@Test
@FlakyTest
@Throws(Throwable::class)
fun testAddItemProgrammatically_withFlexboxLayoutLayoutParams() {
val activity = activityRule.activity
val flexboxLayout = createFlexboxLayout(R.layout.activity_empty_children,
object : Configuration {
override fun apply(flexboxLayout: FlexboxLayout) {
flexboxLayout.alignItems = AlignItems.FLEX_START
val first = createTextView(activity, "1", 0)
val second = createTextView(activity, "2", 0)
val lp1 = FlexboxLayout.LayoutParams(100, 100)
lp1.setMargins(10, 10, 10, 10)
val lp2 = FlexboxLayout.LayoutParams(100, 100)
lp2.setMargins(20, 20, 20, 20)
first.layoutParams = lp1
second.layoutParams = lp2
flexboxLayout.addView(first)
flexboxLayout.addView(second)
}
})
assertThat(flexboxLayout.childCount, `is`(2))
val view1 = flexboxLayout.getChildAt(0)
val view2 = flexboxLayout.getChildAt(1)
// Assert the coordinates of the views added programmatically with margins
assertThat(view1.left, `is`(10))
assertThat(view1.top, `is`(10))
assertThat(view1.bottom, `is`(110))
assertThat(view1.right, `is`(110))
assertThat(view2.left, `is`(140))
assertThat(view2.top, `is`(20))
assertThat(view2.bottom, `is`(120))
assertThat(view2.right, `is`(240))
}
@Throws(Throwable::class)
private fun createFlexboxLayout(@LayoutRes activityLayoutResId: Int,
configuration: Configuration = Configuration.EMPTY): FlexboxLayout {
......
......@@ -1106,8 +1106,13 @@ public class FlexboxLayout extends ViewGroup implements FlexContainer {
}
@Override
protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
return new LayoutParams(p);
protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams lp) {
if (lp instanceof FlexboxLayout.LayoutParams) {
return new FlexboxLayout.LayoutParams((FlexboxLayout.LayoutParams) lp);
} else if (lp instanceof MarginLayoutParams) {
return new FlexboxLayout.LayoutParams((MarginLayoutParams) lp);
}
return new LayoutParams(lp);
}
@FlexDirection
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册