Android的约束布局编程?

在iOS中,我非常喜欢删除故事板,并使用Cartography框架将所有东西放在代码中。 这是从制图的github偷来的:

constrain(view1, view2) { view1, view2 in view1.width == (view1.superview!.width - 50) * 0.5 view2.width == view1.width - 50 view1.height == 40 view2.height == view1.height view1.centerX == view1.superview!.centerX view2.centerX == view1.centerX view1.top >= view1.superview!.top + 20 view2.top == view1.bottom + 20 } 

Android有没有什么等价物? 这似乎是新的约束布局是在正确的方向迈出的一步,但我想以编程方式。

Solutions Collecting From Web of "Android的约束布局编程?"

有点迟到的游戏,但你需要基本上把你的看法在约束布局作为常规的看法,只是有自己的LayoutParams。

在ConstraintLayout的情况下,文档位于这里: https : //developer.android.com/reference/android/support/constraint/ConstraintLayout.LayoutParams.html

这个类包含不同的属性,指定如何在ConstraintLayout中布局视图。 为了在运行时build立约束,build议使用ConstraintSet。

所以推荐的方法是使用ConstraintSet 。

这里有一个很好的代码示例,但核心概念是您需要创build一个新的集合(通过复制/克隆/新等),设置其属性,然后将其应用到您的布局。

例如:假设你的布局包含一个ConstraintLayout(这里叫做mConstraintLayout),里面包含一个视图(样例中的R.id.go_button),你可以这样做:

  ConstraintSet set = new ConstraintSet(); // You may want (optional) to start with the existing constraint, // so uncomment this. // set.clone(mConstraintLayout); // Resize to 100dp set.constrainHeight(R.id.go_button, (int)(100 * density)); set.constrainWidth(R.id.go_button, (int)(100 * density)); // center horizontally in the container set.centerHorizontally(R.id.go_button, R.id.rootLayout); // pin to the bottom of the container set.connect(R.id.go_button, BOTTOM, R.id.rootLayout, BOTTOM, 8); // Apply the changes set.applyTo(mConstraintLayout); // this is my… (ConstraintLayout) findViewById(R.id.rootLayout);