Je sais que nous pouvons définir les valeurs suivantes pour les propriétés android:gravity
et android:layout_gravity
:
center
center_vertical
center_horizontal
, etc.
Mais je suis confus en ce qui concerne les deux.
Quelle est la différence entre l'utilisation de android:gravity
et android:layout_gravity
?
android
android-layout
android-gravity
Paresh Mayani
la source
la source
ImageView
semblent se comporter différemmentTextView
des.Réponses:
Leurs noms devraient vous aider:
android:gravity
définit la gravité du contenu (c'est-à-dire ses sous-vues) du contenuView
utilisé.android:layout_gravity
définit la gravité deView
ou parLayout
rapport à son parent.Et un exemple est ici .
la source
layout_
définit quelque chose qui affecte les éléments extérieurs.android:gravity
est réglé à gauche et ses enfantsandroid:layout_gravity
à droite? de quel côté les enfants s'aligneront-ils?Dedans dehors
gravity
organise le contenu à l' intérieur de la vue.layout_gravity
arrange la position de la vue en dehors de lui-même.Parfois, il est également utile de voir une image. Le vert et le bleu sont
TextViews
et les deux autres couleurs de fond sontLinearLayouts
.Remarques
layout_gravity
ne fonctionne pas pour les vues dans aRelativeLayout
. Utilisez-le pour les vues dans unLinearLayout
ouFrameLayout
. Voir ma réponse supplémentaire pour plus de détails.gravity
n'aura aucun effet. Ainsi,wrap_content
etgravity
n'ont aucun sens ensemble.layout_gravity
n'aura aucun effet. Ainsi,match_parent
etlayout_gravity
n'ont aucun sens ensemble.layout_gravity=center
aspect est le mêmelayout_gravity=center_horizontal
qu'ici car ils sont dans une disposition linéaire verticale. Vous ne pouvez pas centrer verticalement dans ce cas, donclayout_gravity=center
uniquement centré horizontalement.gravity
etlayout_gravity
les vues dans une mise en page. Pour voir ce qui se passe lorsque vous définissez legravity
de la disposition parent elle-même, consultez la réponse supplémentaire à laquelle j'ai fait référence ci-dessus. (Résumé:gravity
ne fonctionne pas bien sur unRelativeLayout
mais peut être utile avec unLinearLayout
.)N'oubliez donc pas que la disposition _gravity organise une vue dans sa disposition . La gravité organise le contenu à l'intérieur de la vue.
xml
Voici le xml de l'image ci-dessus pour votre référence:
en relation
la source
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 s'aligner.Équivalents HTML / CSS
Astuce facile pour vous aider à vous souvenir
Prenez
layout-gravity
comme "Lay-outside-gravity".la source
Réponse courte: utilisez
android:gravity
ousetGravity()
pour contrôler la gravité de toutes les vues enfant d'un conteneur; utiliserandroid:layout_gravity
ousetLayoutParams()
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
orRadioGroup
, il existe deux approches:1) Pour contrôler la gravité de TOUTES les vues enfant d'un
LinearLayout
conteneur (comme vous l'avez fait dans votre livre), utilisezandroid:gravity
(pasandroid:layout_gravity
) dans le fichier XML de mise en page ou lasetGravity()
méthode dans le code.2) Pour contrôler la gravité d'une vue enfant dans son conteneur, utilisez l'
android:layout_gravity
attribut XML. En code, il faut obtenirLinearLayout.LayoutParams
la vue et régler sa gravité. Voici un exemple de code qui définit un bouton en bas dans un conteneur orienté horizontalement:Pour le
LinearLayout
conteneur 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. La définitionandroid:layout_gravity
decenter_horizontal
n'a aucun effet. La gravité verticale par défaut est center (ou center_vertical) et peut être changée en haut ou en bas. En fait, lalayout_gravity
valeur par défaut est-1
mais Android l'a placé verticalement.Pour modifier les positions horizontales des vues enfant dans un conteneur linéaire horizontal, on peut utiliser la
layout_weight
marge et le remplissage de la vue enfant.De même, pour le conteneur de groupe de vues vertical, la gravité verticale de sa vue enfant est alignée en haut l'une au-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 modifiée à gauche ou à droite.En fait, une vue enfant telle qu'un bouton a également
android:gravity
un attribut XML et lasetGravity()
méthode pour contrôler ses vues enfant - le texte qu'il contient . LeButton.setGravity(int)
est lié à cette entrée developer.android.com .la source
D'après 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 vrai, mais la meilleure façon de le savoir est de jouer.
la source
Regardez l'image pour être clair sur la gravité
la source
Si nous voulons définir la gravité du contenu dans une vue, nous utiliserons "android: gravité", et si nous voulons définir la gravité de cette vue (dans son ensemble) dans sa vue parente, nous utiliserons "android: layout_gravity ".
la source
Je pensais simplement ajouter ma propre explication ici - venant d'un arrière-plan sur iOS, voici comment j'ai internalisé les deux en termes iOS: "Layout Gravity" affecte votre position dans la vue d'ensemble. "Gravity" affecte la position de vos sous-vues en vous. Autrement dit, Layout Gravity vous positionne vous-même tandis que la gravité positionne vos enfants.
la source
Il y a beaucoup de différence entre le
gravity
etlayout-gravity
. Je vais vous expliquer mon expérience sur ces 2 concepts ( toutes les informations que j'ai obtenues à cause de mon observation et de quelques sites web ).Remarque:-
La gravité est utilisée dans le contenu de la vue car certains utilisateurs ont répondu et c'est la même chose pour tous
ViewGroup Layout
.Layout-gravity
est utilisé avec la vue parent comme certains utilisateurs ont répondu.Gravity and Layout-gravity
ce travail est plus utile avec lesFrameLayout
enfants.We can't use Gravity and Layout-gravity
dans le Tag de FrameLayout ....Nous pouvons définir Child View n'importe où dans l'
FrameLayout
utilisationlayout-gravity
.Nous pouvons utiliser chaque valeur unique de gravité à l' intérieur du FrameLayout (par exemple: -
center_vertical
,center_horizontal
,center
,top
, etc.), mais il est impossible avec d' autres ViewGroup Layouts.FrameLayout
travailler pleinementLayout-gravity
. Exemple: - Si vous travaillez,FrameLayout
vous n'avez pas besoin de modifier la disposition entière pour ajouter une nouvelle vue. Vous ajoutez simplement View comme dernier dans leFrameLayout
et lui donnezLayout-gravity
de la valeur ( ce sont les avantages de la mise en page-gravité avec FrameLayout ).Production:-
Gravity
fonctionnant comme ci-dessus, mais ici la différence est que nous pouvons utiliser la gravité à l'intérieur duLinearLayout View
etRelativeLayout View
ce qui n'est pas possible dansFrameLayout View
.Remarque: - Ici, nous ne pouvons définir que 3 valeurs de ce
layout_gravity
qui est (left
|right
|center
(également appelécenter_horizontal
)).Production:-
Remarque: - Ici, nous pouvons également définir 3 valeurs,
layout_gravity
c'est-à-dire (top
|bottom
|center
(également appelécenter_vertical
)).production:-
Remarque: - Nous ne pouvons pas utiliser
layout_gravity
dans leRelativeLayout Views
mais nous pouvons utilisergravity
pour définir lesRelativeLayout
enfants à la même position ....la source
textColor
blanc,view
ce serait très bien. : DUne astuce facile à retenir est que la gravité s'applique à nous à l'intérieur de la Terre. Donc,
android:gravity
c'est pour l' intérieur de la vue.Rememeber le sortir en lay out _gravity qui vous aidera à vous rappeler que
android:layout_gravity
cela se référer à l' extérieur de la vuela source
Quelque chose que j'ai vu sur le blog de Sandip que j'ai presque manqué, a résolu mon problème. Il a dit
layout_gravity
NE FONCTIONNE PAS AVECLinearLayout
.Si vous utilisez un
LinearLayout
et que les paramètres de gravité vous rendent fou (comme moi), passez à autre chose.En fait, je suis passé à un
RelativeLayout
alors utilisélayout_alignParentLeft
etlayout_alignParentRight
sur les 2 contenusTextView
pour les mettre sur une seule ligne pour aller à l'extrême gauche et à l'extrême droite.la source
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 parent.
la source
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 à ses parents, pour spécifier la gravité de la vue au sein de ses parents.Pour plus de détails, vous pouvez visiter
la source
Gravité: permet de déplacer le contenu à l'intérieur d'un conteneur. (Comment les sous-vues seront placées).
Important: (DÉPLACER le long de l'axe X ou de l'axe Y dans l'espace disponible).
Exemple: Disons que si vous deviez travailler avec LinearLayout (Hauteur: match_parent, Largeur: match_parent) comme élément de niveau racine, alors vous aurez un espace plein cadre disponible; et les vues enfant indiquent que 2 TextViews (Hauteur: wrap_content, Largeur: wrap_content) à l'intérieur du LinearLayout peuvent être déplacées le long de l'axe x / y en utilisant les valeurs correspondantes de gravité sur le parent.
Layout_Gravity: permet de remplacer le comportement de gravité parent UNIQUEMENT le long de l'axe des x.
Important: (DÉPLACER [remplacer] le long de l'axe X dans l'espace disponible).
Exemple: Si vous gardez à l'esprit l'exemple précédent, nous savons que la gravité nous a permis de nous déplacer le long de l'axe x / y, c'est-à-dire; placez TextViews dans LinearLayout. Disons simplement que LinearLayout spécifie la gravité: centre; ce qui signifie que chaque TextView doit être centrée 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 profondément, vous découvrirez que le texte dans TextView agit comme sous-vue; donc si vous appliquez la gravité sur TextView, le texte à l'intérieur de TextView se déplacera. (le concept entier s'applique ici aussi)
la source
La gravité est utilisée pour définir l'alignement du texte dans les vues, mais layout_gravity est utilisé pour définir les vues lui-même. Prenons un exemple si vous voulez aligner du texte écrit dans editText puis utiliser la gravité et vous voulez aligner ce editText ou n'importe quel bouton ou n'importe quelle vue puis utiliser layout_gravity, donc c'est très simple.
la source
gravité : est utilisé pour des vues simples comme textview, edittext etc.
layout_gravity : est utilisé pour la gravité actuelle de la vue uniquement dans le contexte de sa vue parent relative comme Layout linéaire ou FrameLayout pour faire une vue au centre ou toute autre gravité de son parent.
la source
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 silayout_width
est égal à la"wrap_content"
est utilisé pour la vue elle-même par rapport au fichier parent ou de mise en page.
la source
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 du parentla source
gravité - S'applique à sa propre vision.
layout-gravity --- S'applique à la vue liée à son parent.
la source
Le
android:gravity
définit la gravité (position) des enfants tandis que leandroid:layout_gravity
définit la position de la vue elle-même. J'espère que cela aidela source