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:
Téléphone:
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.
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.
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)