J'essaie d'utiliser ConstraintLayout (version 1.0.2) pour définir la hauteur de 2 vues côte à côte pour correspondre à la plus grande d'entre elles. Cela sert de ViewHolder dans un RecyclerView, où chaque TextView obtient une longueur arbitraire de texte ...
Si je règle chacun sur wrap_content, le plus court diminuera. Si je règle les deux à 0dp (match_contraints), les deux finissent à une hauteur de 0.
Voici la configuration:
<?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>
Je suppose qu’il s’agit d’un bogue, car "0dp" devrait plutôt ressembler à match_parent au lieu de 0 dp.
En passant, sur iOS, les règles de disposition automatique équivalentes (qui consistent à définir la hauteur des vues pour correspondre au haut et au bas du parent) produisent le résultat attendu.
Bien sûr, cela est assez simple avec LinearLayout, mais cette disposition joue un rôle dans une mise en page plus grande, et j'aimerais couper la hiérarchie des vues ...
Répondre, au cas où quelqu'un chercherait une réponse à l'avenir.
ConstraintLayout introduit Barrière in v1.1 pour obtenir l'une de ces fonctionnalités demandées par le PO dans la question
La fonctionnalité mentionnée ci-dessus peut être obtenue en utilisant le code XML ci-dessous:
<?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>
Cela pourrait vous aider.
<Android.support.constraint.ConstraintLayout
Android:id="@+id/activity_main"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin">
<TextView
Android:id="@+id/tv_1"
Android:layout_width="150dp"
Android:layout_height="match_parent"
Android:layout_marginEnd="8dp"
Android:layout_marginRight="8dp"
Android:background="@color/colorAccent"
Android:gravity="center"
Android:padding="@dimen/activity_vertical_margin"
Android:text="sjdjhshdjhdjhsdgfjhgsdjfgjsdgfjsdgfhgdsjhfghs"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/tv_2"
app:layout_constraintTop_toTopOf="parent" />
<TextView
Android:id="@+id/tv_2"
Android:layout_width="150dp"
Android:layout_height="match_parent"
Android:background="@color/colorPrimary"
Android:gravity="center"
Android:padding="@dimen/activity_vertical_margin"
Android:text="sjdjhsjhd"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@+id/tv_1"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</Android.support.constraint.ConstraintLayout>
<TextView
Android:id="@+id/txt_service_request_id"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:background="@drawable/bg_rectangle_blue"
Android:gravity="center"
Android:padding="8dp"
Android:text="@string/service_request_id"
Android:textColor="@Android:color/white"
Android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/txt_service_request_status"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
Android:id="@+id/txt_service_request_status"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:background="@drawable/bg_rectangle_blue"
Android:gravity="center"
Android:padding="8dp"
Android:text="@string/service_request_status"
Android:textColor="@Android:color/white"
Android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/txt_service_request_id"
app:layout_constraintEnd_toStartOf="@+id/txt_service_request_desc"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/txt_service_request_id"
app:layout_constraintTop_toTopOf="parent" />
<TextView
Android:id="@+id/txt_service_request_desc"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:background="@drawable/bg_rectangle_blue"
Android:gravity="center"
Android:padding="8dp"
Android:text="@string/service_request_desc"
Android:textColor="@Android:color/white"
Android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/txt_service_request_id"
app:layout_constraintEnd_toStartOf="@+id/txt_service_request_cat"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/txt_service_request_status"
app:layout_constraintTop_toTopOf="parent" />
<TextView
Android:id="@+id/txt_service_request_cat"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:background="@drawable/bg_rectangle_blue"
Android:gravity="center"
Android:padding="8dp"
Android:text="@string/service_request_cat"
Android:textColor="@Android:color/white"
Android:textSize="12sp"
app:layout_constraintBottom_toBottomOf="@+id/txt_service_request_id"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/txt_service_request_desc"
app:layout_constraintTop_toTopOf="parent" />