web-dev-qa-db-fra.com

Pourcentage de largeur maximale de Contrainte

J'ai expérimenté avec ConstraintLayout, existe-t-il un moyen de définir la largeur maximale d'une vue sur un pourcentage du parent (et une hauteur de contrainte de correspondance et un rapport de dimension de 1: 1)?

Voici le code sans utiliser la largeur max:

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

   <FrameLayout
      Android:id="@+id/frameLayout3"
      Android:layout_width="0dp"
      Android:layout_height="259dp"
      Android:layout_marginEnd="8dp"
      Android:layout_marginStart="8dp"
      Android:background="@Android:color/black"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintHorizontal_bias="0.0"
      app:layout_constraintStart_toEndOf="@+id/imageView"
      app:layout_constraintTop_toTopOf="parent"/>

   <ImageView
      Android:id="@+id/imageView"
      Android:layout_width="0dp"
      Android:layout_height="0dp"
      Android:src="@Android:drawable/ic_menu_add"
      app:layout_constraintBottom_toBottomOf="@+id/frameLayout3"
      app:layout_constraintDimensionRatio="1:1"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintTop_toTopOf="parent"
      app:layout_constraintWidth_percent="0.3"/>

</Android.support.constraint.ConstraintLayout>

Voici le résultat:

Tablette:

Tablet

Téléphone:

Phone

14
Hyhage

J'ai atteint le pourcentage de largeur maximale en utilisant deux attributs:

app:layout_constraintWidth_max="wrap"
app:layout_constraintWidth_percent="0.4" 

Exemple:

<TextView
    Android:id="@+id/textView2"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:layout_marginStart="8dp"
    Android:layout_marginTop="8dp"
    Android:text="Helo world"
    Android:textAlignment="viewStart"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintWidth_max="wrap"
    app:layout_constraintWidth_percent="0.4" />

La largeur du texte augmentera jusqu'à 40% du parent, puis se terminera si le contenu dépasse cela.

35
Thomson Varghese

Si je comprends bien votre problème, vous y êtes presque. Je pense que vous donnez frameLayout une hauteur statique c'est pourquoi il ne donne pas le résultat approprié sur la tablette .. parce que vous définissez la hauteur en fonction de l'aperçu du téléphone. Ce que vous devez faire est de faire la hauteur de frameLayout par rapport à imageView .. donc quand imageView augmente de taille, le frameLayout augmente également avec lui.

Je pense que tu devrais faire quelque chose comme ça

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

    <ImageView
        Android:id="@+id/imageView"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:src="@Android:drawable/ic_menu_add"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintWidth_percent="0.3" />    

    <FrameLayout
        Android:id="@+id/frameLayoutTwo"
        Android:layout_width="0dp"
        Android:layout_height="0dp"
        Android:background="@Android:color/black"
        app:layout_constraintBottom_toBottomOf="@+id/imageView"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/imageView"
        app:layout_constraintTop_toTopOf="parent" /> 

</Android.support.constraint.ConstraintLayout>

J'ai vérifié et cela donne le même résultat sur téléphone et tablette. Corrigez-moi si j'ai mal compris votre problème.

1
Somesh Kumar

Non, il n'y en a pas. Je pense que nous devrions déposer une demande de fonctionnalité. Je suis presque sûr que PercentRelativeLayout n'a pas non plus cette fonctionnalité. (Cette réponse est exacte pour ConstraintLayout 1.1)

0
androidguy