Différence entre gravité et layout_gravity sur Android

Je sais que nous pouvons définir les valeurs suivantes pour android:gravity et android:layout_gravity propriétés android:layout_gravity :

  1. center
  2. center_vertical
  3. center_horizontal , etc.

Mais je suis confus en ce qui concerne ces deux aspects.

Quelle est la différence entre l’utilisation d’ android:gravity et android:layout_gravity ?

Leurs noms devraient vous aider:

  • android:gravity définit la gravité du contenu (c.-à-d. ses sous-vues) de la View il est utilisé.
  • android:layout_gravity définit la gravité de la View ou de la Layout rapport à son parent.

Et un exemple est ici .

La différence

android:layout_gravity est la gravité extérieure de la vue. Spécifie la direction dans laquelle la vue doit toucher la bordure de son parent.

android:gravity est la gravité intérieure de cette vue. Spécifie dans quelle direction son contenu doit être aligné.

Equivalents HTML / CSS

 Android | CSS ————————————————————————+———————————— android:layout_gravity | float android:gravity | text-align 

Truc facile pour vous aider à vous souvenir

Prenez la layout-gravity de la layout-gravity comme “Lay-outside-gravity”.

Dedans dehors

  • gravity organise le contenu à l’ intérieur de la vue.
  • lay out _gravity organise la position de la vue en dehors d’elle-même.

Parfois, cela aide aussi de voir une image. Le vert et le bleu sont des TextViews et les deux autres couleurs d’arrière-plan sont LinearLayouts .

entrer la description de l'image ici

Remarques

  • Le layout_gravity ne fonctionne pas pour les vues dans un RelativeLayout . Utilisez-le pour les vues dans LinearLayout ou FrameLayout . Voir ma réponse supplémentaire pour plus de détails.
  • La largeur (ou la hauteur) de la vue doit être supérieure à son contenu. Sinon la gravity n’aura aucun effet. Ainsi, wrap_content et la gravity n’ont pas de sens ensemble.
  • La largeur (ou la hauteur) de la vue doit être inférieure à celle du parent. Sinon, layout_gravity n’aura aucun effet. Ainsi, match_parent et layout_gravity n’ont pas de sens ensemble.
  • Le layout_gravity=center ressemble ici à layout_gravity=center_horizontal car ils sont layout_gravity=center_horizontal verticalement. Dans ce cas, vous ne pouvez pas centrer verticalement, donc layout_gravity=center ne layout_gravity=center que horizontalement.
  • Cette réponse portait uniquement sur la définition de la gravity et de la layout_gravity sur les vues dans une mise en page. Pour voir ce qui se passe lorsque vous définissez la gravity de la mise en page parent elle-même, consultez la réponse supplémentaire que j’ai mentionnée ci-dessus. (Résumé: la gravity ne fonctionne pas bien sur un RelativeLayout mais peut être utile avec un LinearLayout .)

Alors souvenez-vous que la disposition _gravity dispose une vue dans sa mise en page . La gravité dispose le contenu dans la vue.

xml

Voici le xml pour l’image ci-dessus pour votre référence:

 < ?xml version="1.0" encoding="utf-8"?>                 

en relation

  • Différence entre le rembourrage et la marge d’une vue
  • Match_parent vs wrap_content
  • Comment définir la gravité et la gravité de la mise en page d’un LinearLayout par programmation

Réponse courte: utilisez android:gravity ou setGravity() pour contrôler la gravité de toutes les vues enfants d’un conteneur; utilisez android:layout_gravity ou setLayoutParams() pour contrôler la gravité d’une vue individuelle dans un conteneur.

Histoire longue: pour contrôler la gravité dans un conteneur de disposition linéaire tel que LinearLayout ou RadioGroup , il existe deux approches:

1) Pour contrôler la gravité de TOUTES les vues enfants d’un conteneur LinearLayout (comme vous l’avez fait dans votre livre), utilisez android:gravity (pas android:layout_gravity ) dans le fichier XML de disposition ou la méthode setGravity() dans le code.

2) Pour contrôler la gravité d’une vue enfant dans son conteneur, utilisez l’atsortingbut XML android:layout_gravity . Dans le code, il faut obtenir le LinearLayout.LayoutParams de la vue et définir sa gravité. Voici un exemple de code qui définit un bouton en bas dans un conteneur orienté horizontalement:

 import android.widget.LinearLayout.LayoutParams; import android.view.Gravity; ... Button button = (Button) findViewById(R.id.MyButtonId); // need to cast to LinearLayout.LayoutParams to access the gravity field LayoutParams params = (LayoutParams)button.getLayoutParams(); params.gravity = Gravity.BOTTOM; button.setLayoutParams(params); 

Pour un conteneur LinearLayout horizontal, la gravité horizontale de sa vue enfant est alignée à gauche l’une après l’autre et ne peut pas être modifiée. Définir android:layout_gravity à center_horizontal n’a aucun effet. La gravité verticale par défaut est center (ou center_vertical) et peut être modifiée en haut ou en bas. En fait, la valeur par défaut layout_gravity est -1 mais Android la place au centre.

Pour modifier les positions horizontales des vues enfants dans un conteneur linéaire horizontal, il est possible d’utiliser layout_weight , margin et padding de la vue enfant.

De la même manière, pour un conteneur de groupe de vues vertical, la gravité verticale de sa vue enfant est alignée en haut l’une de l’autre et ne peut pas être modifiée. La gravité horizontale par défaut est centre (ou center_horizontal ) et peut être modifiée à gauche ou à droite.

En fait, une vue enfant telle qu’un bouton possède également l’atsortingbut XML android:gravity et la méthode setGravity() pour contrôler ses vues enfants – le texte qu’il setGravity() . The Button.setGravity(int) est liée à cette entrée developer.android.com .

De ce que je peux rassembler, layout_gravity est la gravité de cette vue dans son parent, et la gravité est la gravité des enfants à l’intérieur de cette vue.

Je pense que c’est juste, mais la meilleure façon de le savoir est de jouer.

Regardez l’image pour être clair sur la gravité

Bien que la question ait déjà été résolue, j’ai quelques exemples démontrant l’utilisation de la gravité, du layout_gravity et du layout_weight.

Vous pouvez trouver les exemples sur http://juanpickselov.com/LayoutExamples.zip

J’ai créé les fichiers dans Eclipse, supprimé les sous-dossiers .svn et inclus des styles, des chaînes, des couleurs, etc. Les fichiers de mise en page sont le point principal des démos. Comme je suis un débutant en développement Java et Android, on peut trouver le Java inefficace. Les fichiers peuvent être copiés dans un projet Eclipse ou je les ai également utilisés dans Netbeans avec le plug-in de développement Android disponible pour cet IDE.

Si nous voulons définir la gravité du contenu dans une vue, nous utiliserons “android: gravity”, et si nous voulons définir la gravité de cette vue (dans son ensemble) dans sa vue parent, nous utiliserons “android: layout_gravity “.

Juste pensé que j’appendais ma propre explication ici – venant d’un arrière-plan sur iOS, c’est comment j’ai intériorisé les deux en termes d’iOS: “Gravité de la disposition” affecte votre position dans la superview. La “gravité” affecte la position de vos sous-vues en vous. Autrement dit, la mise en forme de la gravité vous positionne vous-même tandis que la gravité positionne vos enfants.

Quelque chose que j’ai vu sur le blog de Sandip, que j’ai failli rater, a résolu mon problème. Il a dit que layout_gravity NE FONCTIONNE PAS AVEC LinearLayout .

Si vous utilisez un LinearLayout et que les parameters de gravité vous LinearLayout fou (comme moi), passez à autre chose.

En fait, je suis passé à un RelativeLayout puis layout_alignParentLeft utilisé layout_alignParentLeft et layout_alignParentRight sur les 2 TextView contenus pour les amener sur une seule ligne à l’extrême gauche et à l’extrême droite.

Il y a beaucoup de différence dans la gravity et la gravity layout-gravity . Je vais vous expliquer mon expérience sur ces 2 concepts ( toutes les informations que j’ai obtenues grâce à mon observation et à certains sites Web ).

Utilisation de la gravité et de la disposition de la gravité dans FrameLayout …..

Remarque:-

  1. La gravité est utilisée à l’intérieur du contenu de la vue car certains utilisateurs ont une réponse et il en est de même pour toutes les ViewGroup Layout .

  2. Layout-gravity est utilisée avec la vue parent car certains utilisateurs ont une réponse.

  3. Gravity and Layout-gravity est un travail plus utile avec les enfants de FrameLayout . We can't use Gravity and Layout-gravity dans le tag FrameLayout ….

  4. Nous pouvons définir Child View n’importe où dans FrameLayout aide de la fonction layout-gravity .

  5. Nous pouvons utiliser chaque valeur de gravité à l’intérieur de FrameLayout (par exemple: – center_vertical , center_horizontal , center , top , etc.), mais ce n’est pas possible avec d’autres dispositions de ViewGroup.

  6. FrameLayout travaille pleinement sur Layout-gravity . Exemple: – Si vous travaillez sur FrameLayout vous n’avez pas besoin de modifier la mise en page complète pour append une nouvelle vue. Il vous suffit d’ append View en dernier dans FrameLayout et de lui donner la FrameLayout Layout-gravity value avec valeur ( ceci est un avantage de gravité de la mise en page avec FrameLayout ).

avoir regardé exemple ……

 < ?xml version="1.0" encoding="utf-8"?>        

Sortie:-

g1

Utilisation de la gravité et de la disposition de la gravure dans LinearLayout …..

Gravity fonctionnant comme ci-dessus mais ici differnce est que nous pouvons utiliser Gravity à l’intérieur de la LinearLayout View et de la RelativeLayout View ce qui n’est pas possible dans la FrameLayout View .

LinearLayout avec orientation verticale ….

Remarque: – Ici, nous ne pouvons définir que 3 valeurs de layout_gravity savoir ( left | right | center (également appelé center_horizontal )).

avoir un exemple: –

 < ?xml version="1.0" encoding="utf-8"?>      

Sortie:-

g2

LinearLayout avec orientation horizontale ….

Remarque: – Ici, nous pouvons également définir 3 valeurs de layout_gravity ( top | bottom | center (également appelé center_vertical )).

avoir un exemple: –

 < ?xml version="1.0" encoding="utf-8"?>      

sortie:-

g3

Remarque: – Nous ne pouvons pas utiliser layout_gravity dans les RelativeLayout Views mais nous pouvons utiliser la gravity pour définir les enfants RelativeLayout à la même position ….

android:gravity est utilisée pour spécifier comment placer le contenu de l’object dans l’object même. En un autre mot, Android: la gravité est utilisée pour spécifier la gravité du contenu de la vue.

android:layout_gravity est une atsortingbution que l’enfant peut fournir à son parent pour spécifier la gravité de la vue dans ses parents.

Pour plus de détails, vous pouvez visiter

http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html

La différence fondamentale entre les deux est que –

android: la gravité est utilisée pour les éléments enfants de la vue.

android: layout_gravity est utilisé pour cet élément par rapport à la vue parente.

Un truc facile à retenir est que la gravité s’applique à nous à l’intérieur de la terre. Donc, android:gravity est pour l’ intérieur de la vue.

Souvenez- vous de la gravité qui vous aiderait à vous rappeler que android:layout_gravity se rapporterait à l’ extérieur de la vue.

La gravité est utilisée pour définir l’alignement du texte dans les vues, mais la méthode layout_gravity est utilisée pour définir elle-même les vues. Prenons un exemple si vous voulez aligner du texte écrit en editText puis utilisez la gravité et que vous voulez aligner ce editText ou n’importe quel bouton ou n’importe quelle vue, alors utilisez layout_gravity, donc c’est très simple.

gravité : est utilisé pour des vues simples comme textview, edittext etc.

layout_gravity : est utilisé pour la gravité de la vue en cours uniquement dans le contexte de sa vue parent relative, comme la mise en page linéaire ou FrameLayout, pour que la vue soit au centre ou toute autre gravité de son parent.

Gravité: permet de déplacer le contenu dans un conteneur. (Comment les sous-vues seront placées).

Important: (déplacer le long de l’axe X ou l’axe Y dans l’espace disponible).

Exemple: Supposons que si vous travailliez avec LinearLayout (Height: match_parent, Width: match_parent) en tant qu’élément de niveau racine, vous disposerez alors d’un espace plein de frameworks. et les vues enfants indiquent que 2 TextViews (Height: wrap_content, Width: wrap_content) à l’intérieur de LinearLayout peuvent être déplacées le long de l’axe x / y en utilisant les valeurs correspondantes pour la gravité sur le parent.

Layout_Gravity: Permet de remplacer le comportement de gravité parent UNIQUEMENT le long de l’axe des x.

Important: (MOVE [override] le long de l’axe X dans l’espace disponible).

Exemple: Si vous gardez à l’esprit l’exemple précédent, nous soaps que la gravité nous a permis de nous déplacer selon l’axe x / y, c.-à-d. la place TextViews dans LinearLayout. Disons simplement que LinearLayout spécifie la gravité: centre; Cela signifie que chaque TextView doit être centré verticalement et horizontalement. Maintenant, si nous voulons que l’un des TextView aille à gauche / à droite, nous pouvons remplacer le comportement de gravité spécifié en utilisant layout_gravity sur le TextView.

Bonus: si vous creusez plus loin, vous découvrirez que le texte dans TextView agit comme une sous-vue; Donc, si vous appliquez la gravité sur TextView, le texte à l’intérieur de TextView se déplace. (le concept entier s’applique ici aussi)

 android:gravity 

est utilisé pour ajuster le contenu de la vue par rapport à sa position spécifiée (zone allouée). android:gravity="left" ne ferait rien si layout_width est égal à "wrap_content"

 android:layout_gravity 

est utilisé pour se visualiser par rapport au fichier parent ou au fichier de présentation.

android:gravity -> Définit la gravité du contenu de la vue utilisée.

android:layout_gravity -> Définit la gravité de la vue ou de la disposition de son parent