Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ConstraintLayout: set height of all views in row to match the tallest one

I'm trying to utilize a ConstraintLayout (version 1.0.2) to set the height of 2 side-by-side views to match the tallest one of them. This serves as a ViewHolder in for a RecyclerView, where each TextView gets an arbitrary length of text...

If I set each to wrap_content, the shorter one will shrink. If I set both to 0dp (match_contraints), both end up 0 height.

Here's the setup:

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_marginLeft="2dp"     android:layout_marginRight="2dp"     android:layout_width="match_parent"     android:layout_height="wrap_content">      <TextView         android:id="@+id/id1"         android:layout_width="60dp"         android:layout_height="0dp"         app:layout_constraintTop_toTopOf="parent"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintStart_toStartOf="parent"         app:layout_constraintEnd_toStartOf="@+id/id2"/>      <TextView         android:id="@+id/id2"         android:layout_width="0dp"         android:layout_height="0dp"         app:layout_constraintTop_toTopOf="parent"         app:layout_constraintBottom_toBottomOf="parent"         app:layout_constraintStart_toEndOf="@+id/id1"         app:layout_constraintEnd_toEndOf="parent"/>  </android.support.constraint.ConstraintLayout> 

I suppose this is a bug, as "0dp" should act more like match_parent than actual 0 dp.

On iOS, by the way, the equivalent Auto Layout rules (of setting views' heights to match top and bottom of parent) produce the expected result.

Of course this is pretty simple using LinearLayout, but this layout plays part in a larger layout, and I'd like to trim the view hierarchy...

like image 880
jazzgil Avatar asked Apr 07 '17 22:04

jazzgil


People also ask

Is ConstraintLayout faster than LinearLayout?

Layout with 2 views on different sides. Results show that the fastest layout is Relative Layout, but difference between this and Linear Layout is really small, what we can't say about Constraint Layout. More complex layout but results are the same, flat Constraint Layout is slower than nested Linear Layout.

Which is better RelativeLayout or ConstraintLayout?

ConstraintLayout has flat view hierarchy unlike other layouts, so does a better performance than relative layout. Yes, this is the biggest advantage of Constraint Layout, the only single layout can handle your UI.

What are ConstraintLayout constraints?

A ConstraintLayout is a ViewGroup which allows you to position and size widgets in a flexible way. Note: ConstraintLayout is available as a support library that you can use on Android systems starting with API level 9 (Gingerbread).


1 Answers

Answering, in case anyone is looking out for answer in future.

ConstraintLayout introduced Barrier in v1.1 to achieve one such functionality asked by the OP in the question

The above mentioned functionality can be achieved using below xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:app="http://schemas.android.com/apk/res-auto"     xmlns:tools="http://schemas.android.com/tools"     android:layout_marginLeft="2dp"     android:layout_marginRight="2dp"     android:layout_width="match_parent"     android:layout_height="wrap_content">    <TextView       android:id="@+id/id1"       android:layout_width="60dp"       android:layout_height="wrap_content"       app:layout_constraintTop_toTopOf="parent"       app:layout_constraintLeft_toLeftOf="parent"       app:layout_constraintBottom_toBottomOf="@+id/barrier"       app:layout_constraintVertical_bias="0.0"       android:text="@string/id1_text" />    <TextView       android:id="@+id/id2"       android:layout_width="0dp"       android:layout_height="wrap_content"       app:layout_constraintLeft_toRightOf="@+id/id1"       app:layout_constraintRight_toRightOf="parent"       app:layout_constraintTop_toTopOf="parent"       app:layout_constraintBottom_toBottomOf="@+id/barrier"       app:layout_constraintVertical_bias="0.0"       android:text="@string/id2_text" />    <android.support.constraint.Barrier       android:id="@+id/barrier"       android:layout_width="wrap_content"       android:layout_height="wrap_content"       app:barrierDirection="bottom"       app:constraint_referenced_ids="id1,id2" />  </android.support.constraint.ConstraintLayout> 
like image 141
PunitD Avatar answered Sep 21 '22 11:09

PunitD