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 :
-
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.
-
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 .
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
0 votes
ImageView
semblent se comporter différemment desTextView
's.