J'ai examiné de nombreuses questions similaires ici chez SO, mais rien n'y fait… .. J'ai une hiérarchie de mises en page imbriquées différentes, toutes ont Android:layout_width="fill_parent"
et la mise en page la plus interne a Android:layout_width="wrap_content
- je dois l'aligner au centre ( horizontalement). Comment je fais ça?
Mise à jour: : J'ai trouvé la cause du problème - si je mets le LinearLayout interne dans RelativeLayout avec Android:layout_width="fill_parent"
, le contenu est tout de même enveloppé. Le TableRow, cependant, remplit vraiment l'écran.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical" >
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableRow >
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</TableRow>
</TableLayout>
</FrameLayout>
</LinearLayout>
Ces deux attributs sont souvent confondus:
Android:gravity
définit la gravité du contenu de la vue sur laquelle il est utilisé. Android:layout_gravity
définit la gravité de la vue ou Layout par rapport à son parent .Donc, mettez soit Android:gravity="center"
sur le parent ou Android:layout_gravity="center"
sur le LinearLayout lui-même.
Je me suis surpris à les mélanger plusieurs fois et à me demander pourquoi les choses ne se concentraient pas correctement ...
S'il vous plaît essayez cela dans votre mise en page linéaire
Android:layout_centerHorizontal="true"
Android:layout_centerVertical="true"
<RelativeLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
>
<LinearLayout
Android:orientation="horizontal"
Android:layout_centerHorizontal="true"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content">
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</RelativeLayout>
envisagez de placer relativeLayout sur LinearLayout. Android:layout_centerHorizontal="true"
positionnera le centre de la vue horizontalement.
ajoutez layout_gravity="center"
ou "center_horizontal"
à la mise en page parent.
Sur une note de côté, votre LinearLayout
dans votre TableRow
ne semble pas nécessaire, puisqu'un TableRow
est déjà un horizontal LinearLayout
.
Cela a fonctionné pour moi .. ajouter une vue vide ..
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
Android:orientation="horizontal"
>
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_weight="1"
/>
<com.google.Android.gms.ads.AdView
Android:id="@+id/adView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center_horizontal"
ads:adSize="BANNER"
ads:adUnitId="@string/banner_ad_unit_id" >
</com.google.Android.gms.ads.AdView>
<View
Android:layout_width="0dp"
Android:layout_height="0dp"
Android:layout_weight="1"
/>
</LinearLayout>
Essaye ça:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:orientation="vertical"
>
<FrameLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableLayout
Android:layout_width="fill_parent"
Android:layout_height="wrap_content" >
<TableRow >
<LinearLayout
Android:orientation="horizontal"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:gravity="center_horizontal"
Android:layout_gravity="center_horizontal" >
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="1"
Android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
Android:layout_height="wrap_content"
Android:layout_width="wrap_content"
Android:text="2"
Android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
</TableRow>
</TableLayout>
</FrameLayout>
</LinearLayout>
Try <TableRow Android:gravity="center_horizontal">
Ceci centre la LinearLayout interne dans le tablerow.
J'ai fait face à la même situation lors de la conception d'une notification personnalisée. J'ai essayé avec l'attribut suivant défini avec true.
Android:layout_centerInParent.
Je l'ai expérimenté en travaillant avec RelativeLayouts imbriqué. Ma solution s’est avérée simple, mais c’est une petite chose à ne pas manquer.
Ma mise en page a été définie avec ...
Android:layout_height="fill_parent"
Android:layout_below="@id/someLayout
Android:gravity="center"
... cependant, je ne pensais pas que la mise en page en dessous de celle-ci était placée dessus. Tout ce qui était à l'intérieur de cette disposition était déplacé vers le bas au lieu d'être centré. Ajouter...
Android:layout_above="@id/bottomLayout"
... corrigé mon problème.
cela a fonctionné pour moi.
<LinearLayout>
.
.
.
Android:gravity="center"
.
.>
<TextView
Android:layout_gravity = "center"
/>
<Button
Android:layout_gravity="center"
/>
</LinearLayout>
vous concevez donc la disposition linéaire pour placer tout son contenu (TextView et Button) en son centre, puis la vue TextView et le bouton sont placés par rapport au centre de la disposition linéaire.
@jksschneider explication est presque juste. Assurez-vous que vous n'avez pas défini gravity
sur la disposition parente, puis définissez layout_gravity="center"
sur votre vue ou disposition.
pour les vues ImageView ou autres pour lesquelles la gravure physique ou la gravure n'existe pas, utilisez:. Android:layout_centerInParent="true"
dans l'enfant (J'avais une disposition relative avec un ImageView en tant qu'enfant).
Le problème est que la gravité de root (la disposition principale dans laquelle vous stockez les autres éléments) n'est pas définie. Si vous le changez en center , la gravité des autres éléments doit fonctionner correctement.
Vous trouverez ci-dessous le code pour placer votre Linearlayout en bas et son contenu au centre. Vous devez utiliser RelativeLayout pour définir Layout en bas.
<RelativeLayout 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="50dp"
Android:background="#97611F"
Android:gravity="center_horizontal"
Android:layout_alignParentBottom="true"
Android:orientation="horizontal">
<TextView
Android:layout_width="wrap_content"
Android:layout_height="50dp"
Android:text="View Saved Searches"
Android:textSize="15dp"
Android:textColor="#fff"
Android:gravity="center_vertical"
Android:visibility="visible" />
<TextView
Android:layout_width="30dp"
Android:layout_height="24dp"
Android:text="12"
Android:textSize="12dp"
Android:textColor="#fff"
Android:gravity="center_horizontal"
Android:padding="1dp"
Android:visibility="visible" />
</LinearLayout>
</RelativeLayout>