Je sais que nous pouvons définir les valeurs suivantes sur 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 de _Android:layout_gravity
_?
Leurs noms devraient vous aider:
Android:gravity
définit la gravité du contenu (c'est-à-dire ses sous-vues) de la View
sur laquelle il est utilisé.Android:layout_gravity
définit la gravité de View
ou Layout
par rapport à son parent.Et un exemple est ici .
gravity
organise le contenu à l'intérieur de la vue.layout_gravity
arrange la position de la vue en dehors de d'elle-même.Parfois, il est également utile de voir une photo. Le vert et le bleu sont TextViews
et les deux autres couleurs d'arrière-plan sont LinearLayouts
.
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.gravity
n'aura aucun effet. Ainsi, wrap_content
et gravity
n'ont pas de sens ensemble.layout_gravity
n'aura aucun effet. Ainsi, match_parent
et layout_gravity
n'ont pas de sens ensemble.layout_gravity=center
a le même aspect que layout_gravity=center_horizontal
ici car ils sont disposés verticalement. Dans ce cas, vous ne pouvez pas centrer verticalement, donc layout_gravity=center
ne se centre que horizontalement.gravity
et layout_gravity
sur les vues d'une présentation. Pour voir ce qui se passe lorsque vous définissez la gravity
de la présentation parent elle-même, consultez le réponse supplémentaire auquel j'ai fait référence ci-dessus. (Résumé: gravity
ne fonctionne pas bien sur un RelativeLayout
mais peut être utile avec un LinearLayout
.)Alors rappelez-vous, layout _ la gravité organise une vue dans son layout . Gravity organise le contenu dans la vue.
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>
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é À l'intérieur de cette vue. Spécifie dans quelle direction son contenu doit s'aligner.
Android | CSS
————————————————————————+————————————
Android:layout_gravity | float
Android:gravity | text-align
Prenez layout-gravity
comme "Lay-hors-gravité".
Réponse courte: utilisez Android:gravity
ou setGravity()
pour contrôler la gravité de toutes les vues enfant 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 à structure 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 présentation ou la méthode setGravity()
dans le code. .
2) Pour contrôler la gravité d'une vue enfant dans son conteneur, utilisez l'attribut XML Android:layout_gravity
XML. En 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 et ne peut pas être modifiée. Le réglage de Android:layout_gravity
sur 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 réalité, la valeur par défaut de layout_gravity
est -1
, mais Android l'a mise au centre verticalement.
Pour modifier les positions horizontales des vues enfant dans un conteneur linéaire horizontal, vous pouvez utiliser layout_weight
, la marge et le remplissage de la vue enfant.
De même, pour le conteneur Groupe de vues verticales, la gravité verticale de sa vue enfant est alignée vers le 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 modifiée à gauche ou à droite.
En fait, une vue enfant telle qu'un bouton possède également l'attribut XML Android:gravity
et la méthode setGravity()
pour contrôler ses vues enfant - le texte qu'elle contient. La Button.setGravity(int)
est liée à ceci entrée developer.Android.com .
D'après ce que je peux comprendre 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 vrai, mais la meilleure façon de le savoir est de jouer.
Regardez l'image pour bien comprendre la gravité
Bien que la question soit déjà résolue, j'ai quelques exemples démontrant l'utilisation de la gravité, de layout_gravity et de 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 ajouté des styles, des chaînes, des couleurs, etc. Les fichiers de mise en page sont le point principal des démonstrations. Étant donné que je suis un débutant en développement Java et Android, on peut trouver le inefficace Java. 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: gravité", et si nous voulons définir la gravité de cette vue (dans son ensemble) dans sa vue parente, nous utiliserons "Android: layout_gravity ".
Je pensais que j'ajouterais ma propre explication ici - venant d'un contexte sur iOS, voici comment j'ai intériorisé 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. Dit autrement, Layout Gravity vous positionne vous-même tandis que la gravité positionne vos enfants.
Il y a beaucoup de différence dans les variables gravity
et layout-gravity
. Je vais expliquer mon expérience de ces 2 concepts ( Toutes les informations que j'ai obtenues en raison de mon observation et de certains sites Web ).
Utilisation de Gravity et de Layout-gravity dans
FrameLayout
.....
Remarque: -
La gravité est utilisée à l'intérieur du Voir le contenu comme un utilisateur a la réponse et le est identique pour tous ViewGroup Layout
.
Layout-gravity
est utilisé avec la vue parente en réponse à la demande de certains utilisateurs.
Gravity and Layout-gravity
est un travail plus utile avec les enfants FrameLayout
. We can't use Gravity and Layout-gravity
dans la balise de FrameLayout ....
Nous pouvons définir la vue enfant n'importe où dans la FrameLayout
en utilisant layout-gravity
.
Nous pouvons utiliser chaque valeur de gravité dans FrameLayout (par exemple: - center_vertical
, center_horizontal
, center
, top
, etc.), mais ce n'est pas possible avec d'autres ViewGroup. Layouts.
FrameLayout
travaille entièrement sur Layout-gravity
. Exemple: - Si vous travaillez sur FrameLayout
alors vous n'avez pas besoin de changer toute la mise en page pour ajouter une nouvelle vue. Vous venez d'ajouter View en dernier dans la FrameLayout
et lui donnez Layout-gravity
avec une valeur. ( Ceci est un avantage de la mise en page avec FrameLayout ).
ai regarder 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:-
Utilisation de Gravity et Layout-gravity dans LinearLayout .....
Gravity
fonctionne comme ci-dessus mais la différence ici est que nous pouvons utiliser Gravity à l'intérieur du LinearLayout View
et RelativeLayout View
, ce qui n'est pas possible dans FrameLayout View
.
LinearLayout avec orientation verticale ....
Remarque: - Nous ne pouvons définir ici que 3 valeurs de layout_gravity
c'est-à-dire (left
| right
| center
(également appelé center_horizontal
)).
regardez par 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:-
LinearLayout avec orientation horizontale ....
Remarque: - Nous pouvons également définir 3 valeurs de layout_gravity
c'est-à-dire (top
| bottom
| center
(également appelé center_vertical
)).
regardez par 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:-
Remarque: - Nous ne pouvons pas utiliser layout_gravity
dans le RelativeLayout Views
, mais nous pouvons utiliser gravity
pour définir RelativeLayout
enfants à la même position. ...
Une astuce facile à retenir est que la gravité s’applique à nous à l’intérieur de la Terre. Donc, Android:gravity
est pour à l'intérieur la vue.
Souvenez-vous du out in lay out _ gravité qui vous aiderait à vous rappeler que Android:layout_gravity
ferait référence à extérieur la vue
Quelque chose que j'ai presque raté sur le blog de Sandip 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 paramètres de gravité vous rendent fous (comme moi), passez à autre chose.
En fait, je suis passé à RelativeLayout
, puis j’ai utilisé layout_alignParentLeft
et layout_alignParentRight
sur les 2 contenus TextView
s pour les obtenir sur une seule ligne pour aller très à gauche et à droite.
Gravity: Permet de déplacer le contenu dans un conteneur. (Comment les sous-vues seront placées).
Important: (Déplacez-vous le long de l’axe X ou de l’axe Y dans l’espace disponible).
Exemple: Supposons que si vous utilisiez LinearLayout (Height: match_parent, Width: match_parent) en tant qu'élément de niveau racine, vous disposerez alors d'un espace de trame complet. et les vues enfants indiquent 2 TextViews (Height: wrap_content, Width: wrap_content) à l'intérieur de LinearLayout peuvent être déplacés le long de l'axe x/y en utilisant les valeurs correspondantes de gravité sur le parent.
Layout_Gravity: Vous permet de remplacer le comportement de gravité parent UNIQUEMENT le long de l'axe des x.
Important: (MOVE [override] le long de l'axe des 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 des axes x/y, c'est-à-dire; la place TextViews dans LinearLayout. Disons simplement que LinearLayout spécifie la gravité: center; 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 profondément, vous découvrirez que le texte dans TextView agit comme une vue secondaire; ainsi, si vous appliquez la gravité sur TextView, le texte à l'intérieur de TextView se déplacera. (le concept entier s'applique ici aussi)
Android:gravity
est utilisé pour spécifier comment placer le contenu de l'objet dans l'objet même. Dans un autre mot, Android: la gravité est utilisée pour spécifier la gravité du contenu de la vue.
Android:layout_gravity
est une attribution que l'enfant peut fournir à son parent, afin de 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: gravity est utilisé pour les éléments enfants de la vue.
Android: layout_gravity est utilisé pour cet élément par rapport à la vue parent.
La gravité est utilisée pour définir l'alignement du texte dans les vues, mais layout_gravity est utilisée pour définir les vues elle-même. Prenons un exemple si vous souhaitez aligner le texte écrit dans editText, puis utilisez la gravité et vous souhaitez aligner ce editText ou n'importe quel bouton ou n'importe quelle vue, puis utilisez layout_gravity. C'est donc très simple.
gravité: est utilisé pour des vues simples comme textview, edittext etc.
layout_gravity: est utilisé pour la gravure de la vue actuelle uniquement dans le contexte de sa vue parente relative, telle que Layout linéaire ou FrameLayout, pour rendre la vue au centre ou toute autre gravité de son parent.
gravité - s'applique à sa propre vue.
layout-gravity --- S'applique à la vue associée à son parent.
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
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 au "wrap_content"
Android:layout_gravity
est utilisé pour la vue elle-même par rapport au fichier parent ou au fichier de mise en page.