Réponse courte: utilisez android:gravityou setGravity()pour contrôler la gravité de toutes les vues enfant d'un conteneur; utiliser android:layout_gravityou 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 LinearLayoutor RadioGroup, il existe deux approches:
1) Pour contrôler la gravité de TOUTES les vues enfant d'un LinearLayoutconteneur (comme vous l'avez fait dans votre livre), utilisez android:gravity(pas android:layout_gravity) dans le fichier XML de mise en page ou la setGravity()méthode dans le code.
2) Pour contrôler la gravité d'une vue enfant dans son conteneur, utilisez l' android:layout_gravityattribut XML. En code, il faut obtenir LinearLayout.LayoutParamsla vue et régler 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 le LinearLayoutconteneur 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éfinition android:layout_gravityde center_horizontaln'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, la layout_gravityvaleur par défaut est -1mais Android l'a placé verticalement.
Pour modifier les positions horizontales des vues enfant dans un conteneur linéaire horizontal, on peut utiliser la layout_weightmarge 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:gravityun attribut XML et la setGravity()méthode pour contrôler ses vues enfant - le texte qu'il contient . Le Button.setGravity(int)est lié à cette entrée developer.android.com .