Je souhaite définir les marges en pourcentage. J'ai 4 vues d'image dans une reproduction linéaire et je souhaite définir les marges gauche, droite, supérieure et inférieure par défaut qui conservent le même pourcentage pour chaque taille d'écran.
c'est possible ?
voici une démo de ce que je veux ...
Et voici ce que j'ai essayé et ne fonctionne pas
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical" >
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:weightSum="10" >
<Thumbnail
Android:id="@+id/thumb1"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="4" />
<Thumbnail
Android:id="@+id/thumb2"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="4" />
</LinearLayout>
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1"
Android:weightSum="10" >
<Thumbnail
Android:id="@+id/thumb3"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="4" >
</Thumbnail>
<Thumbnail
Android:id="@+id/thumb4"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="4" />
</LinearLayout>
</LinearLayout>
Merci de votre aide
Vous pouvez avoir View
s invisible dans votre LinearLayout
s en tant qu'entretoises et utiliser le mécanisme layout_weight
pour leur attribuer une taille relative.
Exemple:
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_weight="1">
<Thumbnail
Android:id="@+id/thumb1"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="4" />
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_weight="2"
Android:visibility="invisible"/>
<Thumbnail
Android:id="@+id/thumb2"
Android:layout_width="0dp"
Android:layout_height="match_parent"
Android:layout_weight="4" />
</LinearLayout>
Ajouté le 1 août 2017:
Les deux présentations de cette réponse sont maintenant obsolètes, mais une description est fournie pour savoir comment obtenir la même fonctionnalité avec ConstraintLayout
. Merci à dpg pour le signaler.
Si vous envisagez d'utiliser les pourcentages avec des ressources, cette réponse pourrait être utile.
Ancienne réponse:
Il existe maintenant un meilleur moyen de sortir avec la version 23.0.0 de la bibliothèque de support (environ l'heure, non?). Vous pouvez maintenant utiliser PercentFrameLayout ou PercentRelativeLayout . Ils ont tous les deux les attributs suivants:
Vous pouvez également consulter PercentLayoutHelper.PercentLayoutParams
Vous pouvez définir des marges avec un pourcentage à l'aide de Instructions de ConstraintLayout .
Supposons que vous souhaitiez définir les valeurs de pourcentage suivantes pour votre mise en page:
Ensuite, vous ajoutez simplement les directives suivantes à votre mise en page:
<?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">
<ImageView
Android:id="@+id/imageView1"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_launcher_background"
app:layout_constraintTop_toTopOf="@+id/horGuideline1"
app:layout_constraintStart_toStartOf="@+id/verGuideline1"
app:layout_constraintEnd_toStartOf="@+id/verGuideline2"
app:layout_constraintBottom_toTopOf="@+id/horGuideline2" />
<ImageView
Android:id="@+id/imageView2"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_launcher_background"
app:layout_constraintTop_toTopOf="@+id/horGuideline1"
app:layout_constraintStart_toStartOf="@+id/verGuideline3"
app:layout_constraintEnd_toStartOf="@+id/verGuideline4"
app:layout_constraintBottom_toTopOf="@+id/horGuideline2" />
<ImageView
Android:id="@+id/imageView3"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_launcher_background"
app:layout_constraintTop_toTopOf="@+id/horGuideline3"
app:layout_constraintStart_toStartOf="@+id/verGuideline1"
app:layout_constraintEnd_toStartOf="@+id/verGuideline2"
app:layout_constraintBottom_toTopOf="@+id/horGuideline4" />
<ImageView
Android:id="@+id/imageView4"
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:scaleType="centerCrop"
app:srcCompat="@drawable/ic_launcher_background"
app:layout_constraintTop_toTopOf="@+id/horGuideline3"
app:layout_constraintStart_toStartOf="@+id/verGuideline3"
app:layout_constraintEnd_toStartOf="@+id/verGuideline4"
app:layout_constraintBottom_toTopOf="@+id/horGuideline4" />
<Android.support.constraint.Guideline
Android:id="@+id/verGuideline1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.05" />
<Android.support.constraint.Guideline
Android:id="@+id/verGuideline2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.35" />
<Android.support.constraint.Guideline
Android:id="@+id/verGuideline3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.65" />
<Android.support.constraint.Guideline
Android:id="@+id/verGuideline4"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.95" />
<Android.support.constraint.Guideline
Android:id="@+id/horGuideline1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
app:layout_constraintGuide_percent="0.12" />
<Android.support.constraint.Guideline
Android:id="@+id/horGuideline2"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
app:layout_constraintGuide_percent="0.47" />
<Android.support.constraint.Guideline
Android:id="@+id/horGuideline3"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
app:layout_constraintGuide_percent="0.53" />
<Android.support.constraint.Guideline
Android:id="@+id/horGuideline4"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="horizontal"
app:layout_constraintGuide_percent="0.88" />
</Android.support.constraint.ConstraintLayout>
En conséquence, votre mise en page ressemble à ceci:
En regardant votre image, voici ce que vous pourriez faire, utilisez une disposition relative et insérez la disposition linéaire à l'intérieur. vous pouvez également utiliser weightSum si vous souhaitez que les vues d'image s'adaptent correctement.
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginLeft="5dp"
Android:layout_marginLeft="5dp" >
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentLeft="true"
Android:orientation="vertical" >
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:orientation="vertical" >
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
<ImageView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content" />
</LinearLayout>
</RelativeLayout>