Reputation: 919
For constraint layout v1.1.x in Android we can set height and width as percentage. Similarly, need to set view width and height as percent in Android programmatically: for example, this code is written in xml for some constraint layout:
<!-- the widget will take 40% of the available space -->
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.4"
what will be its java code for doing it runtime?
Upvotes: 20
Views: 15146
Reputation: 161
I found the answers above helpful, but still a little confusing. Here's what ultimately worked for me. There are 2 views involved in this example, a parent Constraint View and a child of the Constraint View.
// 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);
Note that for some reason, a percentage constraint of 1.0F doesn't work, although 0.99F works just fine.
Upvotes: 16
Reputation: 2557
Not sure if this is better or worse, but there is another way to do this than the proposed answer:
Kotlin:
(myView.layoutParams as ConstraintLayout.LayoutParams)
.matchConstraintPercentWidth = value
myView.requestLayout()
Java:
(myView.layoutParams (ConstraintLayout.LayoutParams))
.matchConstraintPercentWidth = value
myView.requestLayout()
Upvotes: 20
Reputation: 2011
You need to use ConstraintSet - Reference
This class allows you to define programmatically a set of constraints to be used with ConstraintLayout. It lets you create and save constraints, and apply them to an existing ConstraintLayout. ConstraintsSet can be created in various ways:
mConstraintLayout = (ConstraintLayout) findViewById(R.id.myconstraint_layout)
ConstraintSet set = new ConstraintSet();
// Add constrains - Here R.id.myconstraint_layout is the Id of your constraint layout
set.constrainPercentHeight(R.id.myconstraint_layout, 0.4);
set.constrainPercentWidth(R.id.myconstraint_layout, 0.4);
// Apply the changes - mConstraintLayout is reference to the desired view
set.applyTo(mConstraintLayout);
You can call those height width percentage methods on this set
And apply those constraints to your Constraint Layout like this
set.applyTo(mConstraintLayout);
Upvotes: 25