2013-08-05 9 views
89

J'essaye de centrer un ImageView à l'intérieur d'un LinearLayout horizontalement et verticalement, mais je ne peux tout simplement pas le faire. La raison principale pour laquelle je n'utilise pas RelativeLayout pour cela est parce que j'ai besoin du layout_weight (mon Activity se compose de quatre colonnes qui devraient être également divisées, et également sensible aux différentes largeurs d'écran, chaque colonne ayant un ImageView centré et non étiré) .Comment centrer le contenu dans une mise en page linéaire?

Voici mon xml jusqu'à présent:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:baselineAligned="false" 
    android:gravity="center" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Main" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_speak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_speak" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_readtext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_readtext" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_edit" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_edit" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_config" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_config" /> 
    </LinearLayout> 
</LinearLayout> 
+0

post photo d'écran que vous voulez et capture d'écran actuelle –

Répondre

228

android:gravity gère l'alignement de sa enfants,

android:layout_gravity gère l'alignement de lui-même.

Utilisez donc l'un d'entre eux.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:baselineAligned="false" 
    android:gravity="center" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Main" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center" > 

     <ImageView 
      android:id="@+id/imageButton_speak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_speak" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:gravity="center" > 

     <ImageView 
      android:id="@+id/imageButton_readtext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_readtext" /> 
    </LinearLayout> 

    ... 
</LinearLayout> 

ou

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#000" 
    android:baselineAligned="false" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context=".Main" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_speak" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_speak" /> 
    </LinearLayout> 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:layout_gravity="center" 
     android:layout_weight="1" > 

     <ImageView 
      android:id="@+id/imageButton_readtext" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:background="@drawable/image_bg" 
      android:src="@drawable/ic_readtext" /> 
    </LinearLayout> 

    ... 
</LinearLayout> 
+3

Merci, mec! Cela a fonctionné parfaitement! – horta

+0

"android: layout_gravity prend soin de lui-même." modifierait pour dire que la gravité de la disposition est utilisée par le parent. – ataulm

25
android:layout_gravity is used for itSelf of layout 

utilisation android:gravity="center" pour Childs de votre LinearLayout

de sorte que votre code doit être

<LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="wrap_content" 
     android:gravity="center" 
     android:layout_weight="1" > 
4

J'ai essayé les solutions ici, mais je problème et essayer quelques changements que je l'esprit le mal dans layout_width besoin wrap_content comme celui-ci

<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:gravity="center" 
    android:layout_weight="1" > 
Questions connexes