对于android中的约束布局v1.1.x,我们可以将高度和宽度设置为百分比。 同样,需要以编程方式在Android中将视图的宽度和高度设置为百分比: 例如,此代码是用xml编写的,用于一些约束布局:
<!-- the widget will take 40% of the available space -->
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.4"
在运行时执行的Java代码是什么?
答案 0 :(得分:4)
您需要使用ConstraintSet-Reference
通过此类,您可以以编程方式定义一组约束,以与 ConstraintLayout 一起使用。它使您可以创建和保存约束,并将其应用于现有的ConstraintLayout。 ConstraintsSet可以通过多种方式创建:
mConstrainLayout = (ConstraintLayout) findViewById(R.id.myconstraint_layout)
ConstraintSet set = new ConstraintSet();
// Add constrains - Here R.id.myconstraint_layout is id of your constrain layout
set.constrainPercentHeight(R.id.myconstraint_layout, 0.4);
set.constrainPercentWidth(R.id.myconstraint_layout, 0.4);
// Apply the changes - mConstraintLayout is reference to it's view
set.applyTo(mConstraintLayout);
您可以在此集合上调用那些高度宽度百分比方法
像这样将这些约束应用于您的约束布局
set.applyTo(mConstraintLayout);
答案 1 :(得分:4)
我发现上面的答案很有帮助,但仍然有点令人困惑。这就是最终对我有用的东西。本例涉及两个视图,一个父约束视图和一个约束视图的子视图。
// Get the constraint layout of the parent constraint view.
ConstraintLayout mConstraintLayout = findViewById(R.id.parentView);
// Define a constraint set that will be used to modify the constraint layout parameters of the child.
ConstraintSet mConstraintSet = new ConstraintSet();
// Start with a copy the original constraints.
mConstraintSet.clone(mConstraintLayout);
// Define new constraints for the child (or multiple children as the case may be).
mConstraintSet.constrainPercentWidth(R.id.childView, 0.5F);
mConstraintSet.constrainPercentHeight(R.id.childView, 0.7F);
// Apply the constraints for the child view to the parent layout.
mConstraintSet.applyTo(mConstraintLayout);
请注意,出于某种原因,1.0F 的百分比约束不起作用,尽管 0.99F 效果很好。
答案 2 :(得分:1)
请注意这是好是坏,但是除了建议的答案,还有另一种方法:
// Kotlin:
(myView.layoutParams as ConstraintLayout.LayoutParams).matchConstraintPercentWidth = value
myView.requestLayout()
// Java:
(myView.layoutParams (ConstraintLayout.LayoutParams)).matchConstraintPercentWidth = value
myView.requestLayout()