4

J'ai une disposition XML pour un ViewHolder dans un RecyclerView.ConstraintLayout beta5 wrap_content n'emballe pas correctement

La racine de ce modèle est un objet ConstraintLayout dont la hauteur est wrap_content.

A l'intérieur de cette hiérarchie plane, il y a 3 textviews et une vue d'image avec une hauteur fixe; penser à:

<ConstraintLayout> 
    <TextView height=wrap> 
    <TextView height=wrap> 
    <TextView height=wrap> 
    <ImageView height=150dp> 
</ConstraintLayout> 

C'est une mise en page relativement simple. Dans ce beta4 est à quoi il ressemble dans le concepteur (et éventuellement à l'exécution, chaque cellule recyclerView):

Beta4

Toutes mes excuses pour la « bureaucratie » mais il est NDA bla bla.

Cela étant dit, les éléments sont les suivants:

Les 3 vues texte (rouge scotché avec un joli fond violet) Le ImageView avec 150dp hauteur est la chose grise.

Le fond violet a été appliqué à la racine ConstraintLayout. Tout est sympa.

Maintenant, c'est à quoi il ressemble, sans une modification simple avec Beta 5:

beta5

Comme vous pouvez le voir le pourpre (racine) Constraint mise en page est maintenant « confus » et ne pas envelopper le contenu comme avant.

choses que j'essayé:

  1. Ajout app:layout_constraintHeight_default="wrap" au ConstraintLayout (et la propagation trop). N'a pas fait la différence.

  2. Le ImageView a une contrainte app:layout_constraintBottom_toBottomOf="parent" que j'ai essayé de supprimer, n'a pas fait de différence non plus.

  3. revenir à beta4 :)

Pour mémoire, c'est la mise en page complète (id de ont été rebaptisés pour des raisons lourdeurs administratives et aucun outil: texte ou similaire en raison des mêmes raisons) . La mise en page est par ailleurs exactement la même.

<?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_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@color/colorAccent"> 

    <TextView 
     android:id="@+id/toplabel" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginStart="8dp" 
     android:layout_marginTop="8dp" 
     android:text="" 
     android:textStyle="bold" 
     app:layout_constraintBottom_toBottomOf="@+id/top_bottom_label" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toLeftOf="@+id/top_right_label" 
     app:layout_constraintTop_toTopOf="parent" /> 

    <TextView 
     android:id="@+id/top_right_label" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="8dp" 
     android:layout_marginTop="8dp" 
     android:ellipsize="end" 
     android:gravity="end" 
     android:maxLines="1" 
     android:text="" 
     app:layout_constraintBottom_toTopOf="@+id/top_bottom_label" 
     app:layout_constraintHorizontal_bias="1.0" 
     app:layout_constraintLeft_toRightOf="@+id/toplabel" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toTopOf="parent" 
     app:layout_constraintVertical_chainStyle="packed" /> 

    <TextView 
     android:id="@+id/top_bottom_label" 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_marginEnd="8dp" 
     android:layout_marginTop="8dp" 
     android:ellipsize="end" 
     android:gravity="end" 
     android:maxLines="1" 
     android:text="" 
     app:layout_constraintHorizontal_bias="1.0" 
     app:layout_constraintLeft_toRightOf="@+id/toplabel" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/top_right_label" /> 

    <ImageView 
     android:id="@+id/imageview" 
     android:layout_width="0dp" 
     android:layout_height="150dp" 
     android:layout_marginTop="8dp" 
     app:layout_constraintBottom_toBottomOf="parent" 
     app:layout_constraintLeft_toLeftOf="parent" 
     app:layout_constraintRight_toRightOf="parent" 
     app:layout_constraintTop_toBottomOf="@+id/top_bottom_label" 
     app:srcCompat="@android:color/darker_gray" /> 

</android.support.constraint.ConstraintLayout> 

Suis-je censé faire quelque chose de différent? (Je sais que je peux le remplacer par un RelativeLayout et faire probablement la même chose, mais quand même ... Je crois en ConstraintLayout!) :)

Répondre

5

Je filed a bug à ce sujet et je suis une solution de contournement.

C'est une régression et sera corrigé (nous espérons) mais ... il s'avère que ma Chaîne est aussi mal définie. Mon top_bottom_labeln'a pas un point d'extrémité inférieur, et selon la documentation les éléments dans une chaîne doivent être connectés sur les deux points d'extrémité.

J'ai donc ajouté app:layout_constraintBottom_toTopOf="@id/imageview" au top_bottom_label et cela semble fonctionner pour mon cas. J'ai, effectivement ajouté l'imageView à la chaîne, même si je ne m'en soucie pas vraiment. Cela fonctionne pour le moment.

Mise à jour 14 février 2017: L'équipe ConstraintLayout @ Google a résolu le problème dans le fichier maître. Il sera probablement corrigé dans une prochaine version. (Merci!).