web-dev-qa-db-fra.com

ConstraintLayout ne respecte pas la hauteur maximale

J'essaie de créer une composition de mise en page à l'aide de ConstraintLayout . Pour simplifier mon cas, ma mise en page doit comporter trois parties:

  1. La première mise en page (en rouge), qui devrait s’agrandir en fonction de l’espace restant et d’une hauteur maximale.
  2. La deuxième mise en page (en vert), qui a une taille fixe de 150dp et doit toujours être inférieure à la première.
  3. La première mise en page (en rose) a également une taille fixe de 150dp et doit être alignée au bas de la vue.

La partie avec laquelle je me bats est de définir une hauteur maximale pour la première mise en page (rouge). Il semble que ConstraintLayout ignore mes "instructions de hauteur maximale": 

app:layout_constraintHeight_max="300dp"

Voici mon résultat actuel (la partie rouge ignore la limite de hauteur ..):

 enter image description here

Voici le code XML complet:

<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:id="@+id/coordinatorLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:background="@color/white"
tools:context="com.mixtiles.Android.reviewOrder.ReviewOrderActivity"
tools:layout_editor_absoluteY="25dp">


<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appBarLayout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/white">
        <Android.support.v7.widget.Toolbar
            Android:id="@+id/review_order_toolbar"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:elevation="4dp"
            Android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
        </Android.support.v7.widget.Toolbar>
</Android.support.design.widget.AppBarLayout>

<FrameLayout
    Android:id="@+id/red"
    Android:layout_width="0dp"
    Android:layout_height="0dp"
    Android:background="@color/red"
    app:layout_constraintBottom_toTopOf="@+id/green"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintHeight_max="300dp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/appBarLayout"
    app:layout_constraintVertical_chainStyle="spread_inside">

</FrameLayout>


<FrameLayout
    Android:id="@+id/green"
    Android:layout_width="0dp"
    Android:layout_height="150dp"
    Android:background="@color/greenish"
    app:layout_constraintBottom_toTopOf="@+id/pink"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/red">

</FrameLayout>

<FrameLayout
    Android:id="@+id/pink"
    Android:layout_width="match_parent"
    Android:layout_height="150dp"
    Android:background="@color/pink"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@+id/green">

</FrameLayout>

9
Rom Shiri
Android:layout_height="wrap_content"
app:layout_constraintHeight_max="300dp"
app:layout_constrainedHeight="true"

assurez-vous de définir la hauteur wrap_content 

10
elham shahidi

Le problème peut être que vous ne pouvez pas avoir ces deux contraintes définies en même temps sur la vue rouge:

app:layout_constraintBottom_toTopOf="@+id/green"app:layout_constraintTop_toBottomOf="@+id/appBarLayout"

Si ces deux contraintes sont définies, la vue rouge sera attachée en haut à appBarLayout et en bas à la vue verte, ce qui signifie qu'elle occupera tout l'espace entre ces deux vues.

Si vous souhaitez que la contrainte de hauteur maximale soit respectée, vous devez supprimer l'une de ces deux contraintes. Lequel doit être retiré dépend du type de résultat final que vous attendez.

ANCIENNE REPONSE

Je pense que vous devriez utiliser Android:maxHeight au lieu de app:layout_constraintHeight_max.

0
markusian