2010-07-20 5 views
24

Le code XML suivant ne fonctionne pas au centre d'un ImageView dans un LinearLayout:Comment centrer un ImageView dans un LinearLayout?

<?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="wrap_content"> 
    <ImageView 
     android:id="@+id/myimg" 
     android:layout_width="36dip" 
     android:layout_height="36dip" 
     android:scaleType="fitXY" 
     android:layout_gravity="center_horizontal" 
     android:background="@drawable/my_background" 
    /> 
</LinearLayout> 

Et ce code est RelativeLayout qui fonctionne étonnamment:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/myimg" 
     android:layout_width="36dip" 
     android:layout_height="36dip" 
     android:scaleType="fitXY" 
     android:layout_centerHorizontal="true" 
     android:background="@drawable/my_background" 
    /> 
</RelativeLayout> 

Quelqu'un peut-il me dire pourquoi? Merci!

+0

je ne pourrais jamais obtenir la gravité des attributs de fonctionner correctement. Je voudrais juste aller avec la disposition relative. – Falmarri

+0

Sans mise à l'échelle de l'image (scaleType), vous pouvez le faire en changeant android: layout_width = "36dip" en "fill_parent". –

+2

J'ai toujours des problèmes avec la gravité. Une chose que vous pourriez essayer est de placer l'attribut layout_gravity sur le * parent * - LinearLayout - au lieu de l'ImageView. – MatrixFrog

Répondre

2

Le problème vient du fait que vous utilisez android: layout_width = "fill_parent" dans LinearLayout. Changez à « wrap_content »

+0

Ceci, malheureusement, ne fait qu'emballer: les limites de mise en page linéaire sont pratiquement égales (en ce qui concerne les paddings et les marges possibles) à celle de ImageView au lieu de centrer ImageView à l'intérieur de LinearLayout plus grand. –

28

Vous devez définir l'orientation verticale sur votre LinearLayout

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:orientation="vertical"> 
<ImageView 
    android:id="@+id/myimg" 
    android:layout_width="36dip" 
    android:layout_height="36dip" 
    android:scaleType="fitXY" 
    android:layout_gravity="center_horizontal" 
    android:background="@drawable/my_background" 
/> 

+0

Cela a fonctionné pour moi, belle réponse –

7

Ce qui fonctionne habituellement pour moi, j'Enroulez le imageview dans un RelativeLayout quand va ensuite dans un LinearLayout s'assure que les attributs height et width de relativelayout correspondent à linearLayout. Et vous savez comment garder l'imageview au centre du relativelayout.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"> 
       <RelativeLayout 
         android:layout_width="match_parent" 
         android:layout_height="match_parent" 
         <ImageView 
          android:id="@+id/myimg" 
          android:layout_width="36dip" 
          android:layout_height="36dip" 
          android:scaleType="fitXY" 
          android:orientation="vertical" 
          android:layout_gravity="center_horizontal" 
          android:background="@drawable/my_background" 
         /> 
       </RelativeLayout> 
    </LinearLayout> 
+2

Quel est le problème avec les gars LinearLayout ??? –

2
<LinearLayout 
    android:orientation="horizontal" 
    android:layout_width="0dp" 
    android:layout_weight="0.50" 
    android:gravity="center" 
    android:layout_height="wrap_content"> 
    <ImageView 
     android:id="@+id/addToDateOrReceipt" 
     android:layout_width="25dp" 
     android:layout_height="25dp" /> 
</LinearLayout> 

Définir l'androïde: propriété de la gravité de votre LineraLayout au centre.

12

Désolé, mais au-dessus du code ne fonctionne pas pour moi, donc j'afficher mon code qui a fonctionné pour moi est

<?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:background="@color/colorPrimary" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="vertical"> 

    <ImageView 
     android:id="@+id/ivPic" 
     android:layout_width="70dp" 
     android:layout_height="70dp" /> 

</LinearLayout> 

J'espère que cela aide pour d'autres qui ont besoin.

+1

Il est utile pour moi, donc, je upvote vos ans :) –

+1

Parfaitement travaillé pour moi.Merci !! –

0

Vous pouvez également le faire avec un FrameLayout et à l'intérieur un LinearLayout afin qu'il soit plus facile à gérer et plus facile à placer au centre de la vue.

<?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" 
    android:orientation="vertical"> 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/app_name" /> 

    <ImageView 
     android:id="@+id/ivPic" 
     android:layout_width="70dp" 
     android:layout_height="70dp" /> 
</LinearLayout> 
</FrameLayout> 

Je sais que vous demandez sur la façon de centrer un imageview dans une mise en page, mais voulait donner une autre façon de le faire

Questions connexes