1433 votes

Quelle est la différence entre gravity et layout_gravity dans Android ?

Je sais qu'il est possible de définir les valeurs suivantes dans le champ android:gravity y android:layout_gravity propriétés :

  1. center
  2. center_vertical
  3. center_horizontal etc.

Mais je suis confus à propos de ces deux éléments.

Quelle est la différence entre l'utilisation de android:gravity y android:layout_gravity ?

285 votes

Une astuce facile à retenir : Prenez "layout-gravity" comme "Lay-outside-gravity".

6 votes

Centre == centre_vertical | centre_horizontal

5 votes

Ces vidéos m'ont beaucoup aidé à comprendre la différence : youtube.com/watch?v=DxfYeAUd238 youtube.com/watch?v=1FyAIWLVcTc

1434voto

Sephy Points 18893

Leurs noms devraient vous aider :

  • android:gravity définit la gravité du contenu (c'est-à-dire de ses sous-vues) de l'objet View sur lequel il est utilisé.
  • android:layout_gravity définit la gravité de la View o Layout par rapport à son parent.

Et un exemple est aquí .

101 votes

Fondamentalement, tout ce qui a layout_ définit quelque chose qui affecte les éléments extérieurs.

37 votes

Vous voyez, je trouve ça drôle, parce que si je me fie uniquement aux noms, mon intuition est à l'opposé. À chaque fois, je pense que "layout_gravity" signifie "la gravité de la façon dont ce ViewGroup dispose son contenu", et que "gravity" est "l'endroit où cette View gravite".

17 votes

Alors que se passe-t-il si le android:gravity est positionné à gauche et les éléments android:layout_gravity est réglé sur la droite ? de quel côté les enfants s'aligneront-ils ?

583voto

Suragch Points 197

Intérieur - Extérieur

  • gravity organise le contenu à l'intérieur de la vue.
  • lay**out**_gravity arrange la position de la vue à l'extérieur de de lui-même.

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

enter image description here

Notes

  • En layout_gravity ne fonctionne pas pour les vues dans un RelativeLayout . Utilisez-le pour les vues dans un LinearLayout o FrameLayout . Voir mon réponse complémentaire pour plus de détails.
  • La largeur (ou la hauteur) de la vue doit être supérieure à son contenu. Sinon, gravity n'aura aucun effet. Ainsi, wrap_content y gravity n'ont aucun 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 y layout_gravity n'ont aucun sens ensemble.
  • En layout_gravity=center est identique à layout_gravity=center_horizontal ici parce qu'ils sont dans une disposition linéaire verticale. Vous ne pouvez pas centrer verticalement dans ce cas, donc layout_gravity=center ne se centre qu'horizontalement.
  • Cette réponse ne traitait que du réglage gravity y layout_gravity sur les vues d'une mise en page. Pour voir ce qui se passe lorsque vous définissez le paramètre gravity de la mise en page parentale elle-même, vérifiez les éléments suivants réponse complémentaire dont j'ai parlé plus haut. (Résumé : gravity ne fonctionne pas bien sur un RelativeLayout mais peut être utile avec un LinearLayout .)

Alors, n'oubliez pas, mise en page _la gravité arrange une vue dans son mise en page . La gravité permet de disposer le contenu à l'intérieur de la vue.

xml

Voici le xml de 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>

Related

2 votes

Cela semble plus facile après l'avoir vu visuellement, merci Suragch.

478voto

Vishnu Haridas Points 3544

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 son parent.

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

Équivalents HTML/CSS

(si vous venez d'un milieu de développement web)

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

Un truc facile pour vous aider à vous souvenir

Prenez layout-gravity comme "Lay-outside-gravity".

1 votes

Cela a plus de sens quand on a une formation de développeur web.

51voto

boiledwater Points 995

Les exemples ci-dessous montrent la différence entre la mise en page : gravité et la gravité, peut être vous aider. http://sandipchitale.blogspot.com/2010/05/linearlayout-gravity-and-layoutgravity.html

42voto

Ying Points 541

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

Longue histoire : pour contrôler la gravité dans un conteneur à disposition linéaire tel que LinearLayout o RadioGroup il existe deux approches :

  1. Pour contrôler la gravité de TOUTES les vues enfant d'une LinearLayout (comme vous l'avez fait dans votre livre), utilisez la fonction android:gravity (pas android:layout_gravity ) dans le fichier XML de mise en page ou setGravity() dans le code.

  2. Pour contrôler la gravité d'une vue enfant dans son conteneur, utilisez android:layout_gravity Attribut XML. En code, il faut obtenir l'attribut LinearLayout.LayoutParams de la vue et définir sa gravité. Voici un exemple de code qui fixe 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 l'horizontale LinearLayout la gravité horizontale de sa vue enfant est alignée à gauche l'une après l'autre et ne peut être modifiée. Réglage de android:layout_gravity a center_horizontal n'a aucun effet. La gravité verticale par défaut est le centre (ou center_vertical) et peut être modifiée en haut ou en bas. En fait, la valeur par défaut layout_gravity valeur est -1 mais Android l'a centré verticalement.

Pour modifier les positions horizontales des vues enfant dans un conteneur linéaire horizontal, on peut utiliser layout_weight la marge et le rembourrage de la vue enfant.

De même, pour le conteneur vertical View Group, la gravité verticale de sa vue enfant est alignée en haut, l'une en dessous de l'autre, et ne peut être modifiée. La gravité horizontale par défaut est centrée (ou center_horizontal ) et peut être changé en gauche ou en droite.

En fait, une vue enfant telle qu'un bouton a également android:gravity et l'attribut XML setGravity() pour contrôler ses vues enfant - le texte qu'elles contiennent. Le site Button.setGravity(int) est lié à ce entrée developer.Android.com .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X