web-dev-qa-db-fra.com

ConstraintLayout layout_constraintDimensionRatio ne fonctionne pas

J'ai utilisé constraintLayout et layout_constraintDimensionRatio = "1: 1" (la largeur est warp_content, la hauteur est 0dp (match_constraint))

En conséquence, je m'attendais à ce que la largeur et la hauteur soient de 1: 1 mais ne fonctionnent pas.

qu'est-ce qui ne va pas??

J'ai joint le code et la capture d'écran.

<?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="match_parent">

    <TextView
        Android:id="@+id/t1"
        Android:layout_width="wrap_content"
        Android:layout_height="0dp"
        Android:background="@Android:color/holo_blue_bright"
        Android:gravity="center"
        Android:text="Hello World!11"
        app:layout_constraintDimensionRatio="1:1" />

</Android.support.constraint.ConstraintLayout>

capture d'écran

Je cite Android sur Constraintlayout. https://developer.Android.com/reference/Android/support/constraint/ConstraintLayout.html#DimensionConstraints

"Ratio :: Vous pouvez également définir une dimension d'un widget en tant que ratio de l'autre. Pour ce faire, vous devez avoir au moins une dimension contrainte définie sur 0dp (c'est-à-dire MATCH_CONSTRAINT) et définir l'attribut layout_constraintDimentionRatio à un rapport donné. Par exemple:

     <Button Android:layout_width="wrap_content"
               Android:layout_height="0dp"
               app:layout_constraintDimensionRatio="1:1" />

définira la hauteur du bouton comme étant sa largeur. "

-> mais je ne travaillais pas.

14
pistolcaffe

Vous oubliez d'ajouter vos contraintes

<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="match_parent">

    <TextView
        Android:id="@+id/t1"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        Android:background="@Android:color/holo_blue_bright"
        Android:gravity="center"
        Android:text="Hello World!11"
        app:layout_constraintDimensionRatio="1" />

</Android.support.constraint.ConstraintLayout>

0dp est uniquement appliqué aux vues enfants de ConstraintLayout. Toute vue doit appliquer les règles d'attribut de son parent.

26
Rami Jemli

Depuis la version 1.1.0, cela a changé.

Vous pouvez maintenant définir:

app:layout_constraintDimensionRatio="1:1"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintDimensionRatio="H,1:1"

Consultez le lien ci-dessous pour trouver toute la documentation concernant DimensionConstraints:

Lien vers les documents

7
Koen Van Looveren

Dans mon cas, j'ai un problème comme je dois remplir ma mise en page à l'intérieur du conteneur avec un rapport de papier de format A4.

Problème

Je reçois des pages de curriculum vitae au format A4 en tant qu'images du backend, je dois donc ajouter ces images dans Viewpager dans lequel j'utilise ImageView pour afficher ces images.

Solution

J'ai parcouru Disposition de contrainte document dans lequel la section Ratio est là. Je peux donc utiliser layout_constraintDimensionRatio pour résoudre mon problème.

enter image description here

Donc, mon xml qui est utilisé pour afficher la mise en page entière suit, dans mon cas, j'ai utilisé app:layout_constraintDimensionRatio="1:1.27" comme avec: rapport hauteur, mais le rapport réel est app:layout_constraintDimensionRatio="1:1.41"

<?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"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="@color/orange">

    <!-- divider line which i used as restricting my A4 size container height-->

    <View
        Android:id="@+id/divider"
        Android:layout_width="match_parent"
        Android:layout_height="1dp"
        Android:background="@color/headline_title_color"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias=".85"/>

    <!-- A4 size Image View-->

    <ImageView
        Android:id="@+id/resumeContainer"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:layout_marginLeft="12dp"
        Android:layout_marginTop="16dp"
        Android:layout_marginRight="12dp"
        Android:layout_marginBottom="16dp"
        Android:background="@color/green"
        Android:text="@string/change"
        Android:src="@drawable/banner"
        app:layout_constraintBottom_toTopOf="@id/divider"
        app:layout_constraintDimensionRatio="1:1.27"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <!-- for Bottom two buttons -->

    <com.bold.job.utils.CustomButton
        Android:id="@+id/preview"
        style="@style/tertiaryButtonStyle"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_margin="16dp"
        Android:onClick="preview"
        Android:text="@string/preview_resume"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toLeftOf="@id/guideline"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/divider"
        />

    <Android.support.constraint.Guideline
        Android:id="@+id/guideline"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:orientation="vertical"
        app:layout_constraintGuide_percent="0.5" />

    <com.bold.job.utils.CustomButton
        Android:id="@+id/preview2"
        style="@style/tertiaryButtonStyle"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        Android:layout_margin="16dp"
        Android:onClick="preview"
        app:layout_constraintLeft_toRightOf="@id/guideline"
        app:layout_constraintRight_toRightOf="parent"
        Android:text="@string/preview_resume"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintTop_toBottomOf="@id/divider"
        />


</Android.support.constraint.ConstraintLayout>
1
Tushar Pandey