web-dev-qa-db-fra.com

ConstraintLayout: définit la hauteur de toutes les vues en ligne pour correspondre à la plus grande

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 ...

15
jazzgil

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>
2
PunitD

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>

 enter image description here

 enter image description here

0
CodeCameo

<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" />

 Assigning equal width and Height

0
Hammad Tariq