Question Différence entre gravité et layout_gravity sur Android


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

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

Mais je suis confus à propos de ces deux.

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


1149
2017-08-14 09:28


origine


Réponses:


Leurs noms devraient vous aider:

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

Et un exemple est ici.


1196
2017-08-14 09:31



La différence

android:layout_gravity est le À l'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 gravité de cette vue. Spécifie dans quelle direction son contenu doit s'aligner.

Équivalents HTML / CSS

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

Astuce facile pour vous aider à vous souvenir

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


446
2017-07-25 17:07



Dedans dehors

  • gravity arrange le contenu à l'intérieur la vue.
  • layen dehors_gravity arrange la position de la vue à l'extérieur de lui-même.

Parfois, cela aide aussi à voir une photo. Le vert et le bleu sont TextViews et les deux autres couleurs de fond sont LinearLayouts.

enter image description here

Remarques

  • le layout_gravity ne fonctionne pas pour les vues dans un RelativeLayout. Utilisez-le pour les vues dans un LinearLayout ou FrameLayout. Voir mon réponse supplémentaire pour plus de détails.
  • La largeur (ou la hauteur) de la vue doit être supérieure à son contenu. Autrement gravity n'aura aucun effet. Ainsi, wrap_content et gravity sont sans signification ensemble.
  • La largeur (ou la hauteur) de la vue doit être inférieure à celle du parent. Autrement layout_gravity n'aura aucun effet. Ainsi, match_parent et layout_gravity sont sans signification ensemble.
  • le layout_gravity=center ressemble à 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 seulement centres horizontalement.
  • Cette réponse ne concerne que le réglage gravity et layout_gravity sur les vues dans une mise en page. Pour voir ce qui se passe lorsque vous définissez le gravity de la mise en page parent elle-même, consultez la réponse supplémentaire que j'ai mentionné ci-dessus. (Résumé: gravity ne fonctionne pas bien sur un RelativeLayout mais peut être utile avec un LinearLayout.)

Alors souviens-toi, disposition_gravity organise une vue dans son disposition. Gravity 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>

en relation


433
2017-10-04 05:43



Réponse courte: utiliser android:gravity ou setGravity() contrôler la gravité de toutes les vues enfant d'un conteneur; utilisation 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 de disposition linéaire tel que LinearLayout ou RadioGroup, il y a deux approches:

1) Contrôler la gravité de TOUTES les vues d'un enfant LinearLayout récipient (comme vous l'avez fait dans votre livre), utilisez android:gravity (ne pas android:layout_gravity) dans le fichier XML de mise en page ou setGravity() méthode dans le code.

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

Pour modifier les positions horizontales des vues enfants dans un conteneur linéaire horizontal, vous pouvez utiliser layout_weight, marge et remplissage de la vue enfant.

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

En fait, une vue enfant comme un bouton a également android:gravity Attribut XML et le setGravity() méthode pour contrôler ses vues enfant - le texte en elle. le Button.setGravity(int) est lié à cela entrée developer.android.com.


35
2017-07-30 20:01



De ce que je peux rassembler layout_gravity est la gravité de cette vue à l'intérieur de 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.


32
2017-08-14 09:37



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


23
2018-02-04 07:17



Bien que la question soit déjà traitée, 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é 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. Depuis que je suis un débutant de 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 plugin de développement Android disponible pour cet IDE.


10
2017-11-23 05:43



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, nous utiliserons "android: layout_gravity ".


9
2018-04-09 21:21



Juste pensé que je voudrais ajouter ma propre explication ici - venant d'un arrière-plan sur iOS, voici comment j'ai intériorisé les deux termes iOS: "Layout Gravity" affecte votre position dans le superview. "Gravité" affecte la position de vos sous-vues en vous. Autrement dit, Layout Gravity vous positionne alors que la gravité positionne vos enfants.


6
2018-04-15 20:56