Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
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?
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
constrainPercentHeight(int viewId, float percent)
constrainPercentWidth(int viewId, float percent)
And apply those constraints to your Constraint Layout like this
set.applyTo(mConstraintLayout);
–
–
–
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()
–
–
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.
–
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.