Différence entre la gravité et la mise en page de la gravité sur Android

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

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

mais je suis confus à propos de ces deux.

Quelle est la différence entre l'usage de android:gravity et android:layout_gravity ?

1166
demandé sur Keerthi 2010-08-14 13:28:02

19 réponses

leurs noms devraient vous aider:

  • android:gravity fixe la gravité du contenu (c'est-à-dire ses sous-vues) du View il est utilisé sur.
  • android:layout_gravity définit la gravité du View ou Layout par rapport à sa mère.

et un exemple est ici .

1211
répondu Sephy 2017-09-19 18:53:33

la différence

android:layout_gravity est le extérieur gravité de la vue. Spécifie la direction dans laquelle la vue doit toucher la bordure de sa mère.

android:gravity est le à l'intérieur de gravité de cette vue. Spécifie dans quelle direction son contenu doit s'aligner.

HTML / CSS Equivalents

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

astuce facile pour vous aider à vous souvenir

Prendre layout-gravity "Laïcs-à l'extérieur-de la gravité".

446
répondu Vishnu Haridas 2018-02-05 02:46:08

Intérieur - Extérieur

  • gravity organise le contenu à l'intérieur la vue.
  • layout_gravity organise la position de la vue en dehors de de lui-même.

parfois, il est utile de voir une image, aussi. Le vert et le bleu sont TextViews et les deux autres couleurs de fond sont LinearLayouts .

enter image description here

Notes

  • le layout_gravity ne fonctionne pas pour les vues dans un RelativeLayout . L'utiliser pour les vues dans un LinearLayout ou FrameLayout . Voir ma réponse supplémentaire pour plus de détails.
  • la largeur (ou hauteur) de la vue doit être supérieure à son contenu. Sinon gravity n'aura pas effet. Ainsi, wrap_content et 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 à layout_gravity=center_horizontal ici parce qu'ils sont dans un plan linéaire vertical. Vous ne pouvez pas centrer verticalement dans ce cas, donc layout_gravity=center ne se centre que horizontalement.
  • cette réponse ne portait que sur le réglage de gravity et layout_gravity sur les vues à l'intérieur d'une mise en page. Pour voir ce qui se passe lorsque vous définissez le gravity de la mise en page du parent lui-même, consultez la réponse supplémentaire que j'ai mentionnée ci-dessus. (Résumé: gravity ne fonctionne pas bien sur un RelativeLayout , mais peut être utile avec un LinearLayout .)

Donc n'oubliez pas, mise en page _gravity organise une vue dans son layout . La gravité organise le contenu à l'intérieur de la vue.

xml

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

<?xml version="1.0" encoding="utf-8"?>
<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="0dp"
        android:layout_weight="1"
        android:background="#e3e2ad"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="left"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center_horizontal"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#bcf5b1"
            android:gravity="right"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:background="#aacaff"
            android:gravity="center"
            android:text="center" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:background="#d6c6cd"
        android:orientation="vertical" >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center_horizontal"
            android:textSize="24sp"
            android:text="layout_gravity=" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="left"
            android:background="#bcf5b1"
            android:text="left" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center_horizontal"
            android:background="#aacaff"
            android:text="center_horizontal" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="right"
            android:background="#bcf5b1"
            android:text="right" />

        <TextView
            android:layout_width="200dp"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:background="#aacaff"
            android:text="center" />

    </LinearLayout>

</LinearLayout>

lié

438
répondu Suragch 2017-05-23 12:10:45

brève réponse: utiliser android:gravity ou setGravity() pour contrôler la gravité de toutes les vues d'enfant d'un conteneur; utiliser android:layout_gravity ou setLayoutParams() pour contrôler la gravité d'une vue individuelle dans un conteneur.

longue histoire: pour contrôler la gravité dans un conteneur linéaire tel que LinearLayout ou RadioGroup , il y a deux approches:

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

2) pour contrôler la gravité de la vue d'un enfant dans son contenant, utilisez l'attribut android:layout_gravity XML. En code, on doit obtenir le LinearLayout.LayoutParams de la vue et régler sa gravité. Voici un exemple de code qui définit un bouton vers le 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 le conteneur horizontal LinearLayout , la pesanteur horizontale de son enfant la vue est alignée à gauche l'une après l'autre et ne peut pas être changée. Fixer android:layout_gravity à center_horizontal n'a aucun effet. La gravité verticale par défaut est centrale (ou center_vertical) et peut être changée en haut ou en bas. En fait, la valeur par défaut layout_gravity est -1 mais Android l'a mis centre verticalement.

pour changer les positions horizontales des vues de l'enfant dans un conteneur linéaire horizontal, on peut utiliser layout_weight , marge et rembourrage de la vue de l'enfant.

de la même manière, pour le conteneur du groupe de vision verticale, la gravité verticale de son champ de vision pour enfants est alignée sur le haut l'une par-dessous l'autre et ne peut pas être changée. La gravité horizontale par défaut est au centre (ou center_horizontal ) et peut être changée à gauche ou à droite.

en fait, une vue enfant telle qu'un bouton a aussi l'attribut android:gravity XML et la méthode setGravity() pour contrôler ses vues enfant -- le texte en elle. Le Button.setGravity(int) est lié à ce developer.android.com entrée .

35
répondu Ying 2012-09-09 01:20:33

de ce que je peux en déduire layout_gravity est la gravité de cette vue à l'intérieur de son parent, et 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.

32
répondu matto1990 2010-08-14 09:37:23

regarder l'image pour être clair sur la gravité

23
répondu Akshay Paliwal 2015-02-04 07:17:43

bien que la question soit déjà répondue j'ai quelques exemples démontrant l'utilisation de la gravité, layout_gravity, et layout_weight.

vous pouvez trouver les exemples à http://juanpickselov.com/LayoutExamples.zip

j'ai créé les fichiers dans Eclipse, supprimé le .svn sous-dossiers et ont inclus des styles, des cordes, des couleurs, etc. Les fichiers de mise en page sont le point principal des démos. Depuis que je suis un développement Java et Android Novice, 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 plugin de développement Android disponible pour cet IDE.

11
répondu 2010-11-23 05:43:18

si nous voulons définir la gravité du contenu dans une vue, alors nous utiliserons" android:gravité", et si nous voulons définir la gravité de cette vue (dans son ensemble) dans sa vue mère, alors nous utiliserons"android:layout_gravity".

9
répondu Abhishek Tamta 2013-04-28 16:45:37

juste pensé que je voudrais ajouter ma propre explication ici - venant d'un fond sur iOS, c'est comment j'ai intériorisé les deux en termes iOS:" Layout Gravity " affecte votre position dans la superview. La "gravité" affecte la position de vos subviews en vous. Autrement dit, la pesanteur vous positionne vous-même tandis que la pesanteur positionne vos enfants.

6
répondu mszaro 2015-04-15 20:56:16

il y a beaucoup de différence entre le gravity et le 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 ).

Utilisation De la Gravité et de la Mise en page de la gravité dans FrameLayout .....

Remarque:-

  1. gravité est utilisé à l'intérieur du voir le contenu comme un certain Utilisateur ont réponse et il est le même pour tous ViewGroup Layout .

  2. Layout-gravity est utilisé avec la vue de parent comme un utilisateur ont réponse.

  3. Gravity and Layout-gravity est travailler plus utile avec la FrameLayout childs . We can't use Gravity and Layout-gravity dans le Tag de FrameLayout ....

  4. nous pouvons définir Child View n'importe où dans le FrameLayout en utilisant layout-gravity .

  5. nous pouvons utiliser chaque valeur unique de gravité à l'intérieur du FrameLayout (eg:- center_vertical , center_horizontal , center , top , etc), mais ce n'est pas possible avec d'autres configurations de groupes de vue .

  6. FrameLayout Exemple:- Si vous travaillez sur FrameLayout , alors vous pas besoin de changer la mise en page entière pour ajouter une nouvelle vue. Vous juste ajouter vue comme dernier dans le FrameLayout et lui donner Layout-gravity avec valeur.( c'est un avantage de la disposition-gravité avec FrameLayout ).

coup d'oeil sur l'exemple ......

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#264bd1"
        android:gravity="center"
        android:layout_gravity="center"
        android:text="Center Layout Gravity"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#1b64b9"
        android:gravity="bottom"
        android:layout_gravity="bottom|center"
        android:text="Bottom Layout Gravity" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#d75d1c"
        android:gravity="top"
        android:layout_gravity="top|center"
        android:text="Top Layout Gravity"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginTop="100dp"
        android:textColor="#d71f1c"
        android:gravity="top|right"
        android:layout_gravity="top|right"
        android:text="Top Right Layout Gravity"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginBottom="100dp"
        android:textColor="#d71cb2"
        android:layout_gravity="bottom"
        android:gravity="bottom"
        android:text="Top Left Layout Gravity"/>

</FrameLayout>

sortie: -

g1

Utilisation De la Gravité et de la Mise en page de la gravité dans LinearLayout .....

Gravity même travail que ci-dessus, mais ici la différence est que nous pouvons utiliser la gravité à l'intérieur du LinearLayout View et RelativeLayout View qui n'est pas possible dans FrameLayout View .

parcours linéaire avec orientation verticale ....

Note: - ici, nous pouvons définir seulement 3 valeurs de layout_gravity qui est ( left | right | center (aussi appelé center_horizontal )).

coup d'oeil sur exemple :-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="vertical"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#264bd1"
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:text="Center Layout Gravity \nor \nCenter_Horizontal"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginTop="20dp"
        android:textColor="#d75d1c"
        android:layout_gravity="right"
        android:text="Right Layout Gravity"/>


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="80dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginBottom="100dp"
        android:textColor="#d71cb2"
        android:layout_gravity="left"
        android:layout_marginTop="20dp"
        android:gravity="bottom"
        android:text="Left Layout Gravity"/>

</LinearLayout>

sortie: -

g2

parcours linéaire avec orientation horizontale ....

Note: - ici, nous pouvons définir aussi 3 valeurs de layout_gravity qui est ( top | bottom | center (aussi appelé center_vertical )).

coup d'oeil sur exemple :-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="120dp"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:textColor="#264bd1"
        android:gravity="center"
        android:layout_gravity="bottom"
        android:text="Bottom \nLayout \nGravity"/>

    <TextView
        android:layout_width="120dp"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginTop="20dp"
        android:textColor="#d75d1c"
        android:layout_gravity="center"
        android:text="Center \nLayout \nGravity"/>


    <TextView
        android:layout_width="150dp"
        android:layout_height="100dp"
        android:textSize="25dp"
        android:background="#000"
        android:layout_marginBottom="100dp"
        android:textColor="#d71cb2"
        android:layout_gravity="left"
        android:layout_marginTop="20dp"
        android:text="Left \nLayout \nGravity"/>

</LinearLayout>

sortie: -

g3

Remarque:- Nous on ne peut pas utiliser layout_gravity dans le RelativeLayout Views mais on peut utiliser gravity pour mettre RelativeLayout childs à la même position....

4
répondu Sushil Kumar 2016-10-17 06:48:08

quelque chose que J'ai vu sur le blog de Sandip que j'ai presque manqué, a réglé mon problème. Il a dit layout_gravity ne fonctionne pas avec LinearLayout .

si vous utilisez un LinearLayout et que les réglages de gravité vous rendent dingue (comme moi), alors passez à autre chose.

je suis en fait passé à un RelativeLayout puis utilisé layout_alignParentLeft et layout_alignParentRight sur les 2 contenus TextView pour les obtenir sur une ligne pour aller loin à gauche et loin à droite.

3
répondu JustSomeGuy 2015-04-20 15:51:44

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

Rememeber la out dans laïcs out _gravity , qui devrait vous aider à vous rappeler que android:layout_gravity se réfère aux à l'extérieur la vue

3
répondu Mahendra Liya 2018-09-24 11:53:07

android:gravity est utilisé pour spécifier comment placer le contenu de l'objet dans l'objet lui-même. Dans un autre mot, android: gravity est utilisé pour spécifier la gravité du contenu de la vue.

android:layout_gravity est une attribution que l'enfant peut fournir à son parent, pour préciser la gravité de la vue au sein de ses parents.

Pour plus de détails, vous pouvez visiter

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

2
répondu IntelliJ Amiya 2015-05-10 12:17:56

La différence fondamentale entre les deux est que-

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

android:layout_gravity est utilisé pour cet élément à l'égard de la vue parente.

2
répondu Abhishek Tandon 2016-09-15 15:23:43

Gravity: permet de déplacer le contenu à l'intérieur d'un conteneur. (Comment les sous-vues seront placés).

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

exemple: disons que si vous deviez travailler avec LinearLayout (Height: match_parent, Width: match_parent) comme élément de niveau root, alors vous aurez un espace plein cadre disponible; et le point de vue de l'enfant dit 2 TextViews (Height: wrap_content, Width: wrap_content) à l'intérieur de la LinearLayout peut être déplacé le long de l'axe x/y en utilisant les valeurs correspondantes pour la gravité sur parent.

Layout_Gravity: vous permet de surcharger le comportement de gravité parent seulement le long de l'axe des X.

Important: (déplacer[Outrepasser] le long de l'axe des X dans l'espace disponible).

exemple: dans l'exemple précédent, nous savons que la gravité nous a permis de nous déplacer le long de l'axe x/Y. e; la place TextViews inside LinearLayout. Disons simplement que LinearLayout spécifie gravity: center; ce qui signifie que chaque TextView doit être centré à la fois verticalement et horizontalement. Maintenant, si nous voulons que L'une des versions de TextView tourne à gauche / droite, nous pouvons Outrepasser le comportement de gravité spécifié en utilisant layout_gravity sur TextView.

Bonus: si vous creusez plus profond, vous trouverez 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éplacera. (toute la notion s'applique ici aussi)

2
répondu Ali Raza 2018-04-30 10:36:24

Gravity est utilisé pour définir l'alignement du texte dans les vues, mais layout_gravity est utilisé pour définir les vues elles-mêmes. Prenons un exemple si vous voulez aligner du texte écrit dans editText puis utilisez gravity et vous voulez aligner ce texte édité ou n'importe quel bouton ou n'importe quelle vue puis utilisez layout_gravity, donc c'est très simple.

1
répondu Praveen Gaur 2017-05-17 18:15:28

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

layout_gravity : est utilisé pour la vue courante seulement la gravité dans le contexte de sa vue parent relative comme la disposition linéaire ou FrameLayout pour faire la vue au centre ou toute autre gravité de son parent.

1
répondu Mayank Garg 2018-02-07 12:27:28
android:gravity

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

android:layout_gravity 

est utilisé pour la vue elle-même par rapport au fichier parent ou layout.

0
répondu Tulsi 2017-01-02 12:13:14

android:gravity -> Définit la gravité du contenu de la Vue de son.

android:layout_gravity - > définit la gravité de la vue ou de la disposition de ses parents

0
répondu Vamsi 2017-07-12 17:10:04