web-dev-qa-db-fra.com

Restreindre la largeur dans ConstraintLayout par une autre vue

Existe-t-il une possibilité (dans ConstraintLayout) de laisser une vue grandir tant qu'il y a de la place pour une autre vue à sa droite?

Le cas d'utilisation est d'avoir un value et unit TextViews en plus l'un de l'autre. Le value TextView devrait pouvoir grandir tant qu'il y a de l'espace pour le unit. S'il n'y a pas assez d'espace, le value doit être coupé.

ConstraintLayout

Je l'ai essayé avec des chaînes et d'autres choses, mais je ne peux pas le faire. Le value ne cesse de croître et puis le unit n'est plus visible. Voici le code actuel:

<TextView
    Android:id="@+id/value"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="8dp"
    Android:lines="1"
    app:layout_constraintBaseline_toBaselineOf="@+id/unit"
    app:layout_constraintHorizontal_bias="0.0"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toLeftOf="@id/unit"
    tools:text="12533939532" />

<TextView
    Android:id="@+id/unit"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:layout_marginEnd="8dp"
    Android:layout_marginStart="8dp"
    app:layout_constraintHorizontal_chainStyle="packed"
    app:layout_constraintLeft_toRightOf="@id/value"
    app:layout_constraintRight_toRightOf="parent"
    tools:text="km" />
24
Marius

oui vous pouvez en utilisant match_constraint (0dp) qui est égal à match_parent pour une autre mise en page, donc en utilisant match_constraint nous fixons le poids pour la première vue qui occupera tout l'espace disponible ajouter également

app:layout_constraintWidth_default="wrap"

appliquer le comportement de largeur par défaut en tant que wrap_content

voici le code avec changement

<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    xmlns:app="http://schemas.Android.com/apk/res-auto">

        <TextView
            Android:id="@+id/value"
            Android:layout_width="0dp"
            app:layout_constraintWidth_default="wrap"
            Android:layout_height="wrap_content"
            Android:layout_marginStart="8dp"
            Android:lines="1"
            app:layout_constraintBaseline_toBaselineOf="@+id/unit"
            app:layout_constraintHorizontal_bias="0.0"
            app:layout_constraintHorizontal_chainStyle="packed"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toLeftOf="@id/unit"
            tools:text="12533939532" />

        <TextView
            Android:id="@+id/unit"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:layout_marginEnd="8dp"
            Android:layout_marginStart="8dp"
            app:layout_constraintLeft_toRightOf="@id/value"
            app:layout_constraintRight_toRightOf="parent"
            tools:text="km" />

    </Android.support.constraint.ConstraintLayout>

a obtenu une explication du site

Meilleur contrôle des dimensions de la vue

Les nouveaux comportements disponibles lorsqu'une dimension est définie sur 0dp (MATCH_CONSTRAINT) . Comme précédemment, les deux points d'extrémité (gauche/droite ou haut/bas) doivent être connectés aux cibles.

layout_constraintWidth_default = spread (par défaut, similaire au comportement précédent) layout_constraintWidth_default = wrap layout_constraintHeight_default = spread layout_constraintHeight_default = wrap

Wrap fournit un nouveau comportement significatif, le widget se redimensionnant comme si wrap_content était utilisé, mais limité par les contraintes connectées. Un widget ne se développera donc pas au-delà des points de terminaison.

http://tools.Android.com/recent/constraintlayoutbeta5isnowavailable

37
Pavan