2010-07-20 23 views
24

Il seguente codice XML non funziona per centrare un ImageView in un LinearLayout:Come centrare un ImageView in 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> 

E questo è il codice RelativeLayout che funziona sorprendentemente:

<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> 

qualcuno può dirmi perché? Grazie!

+0

potrei mai avere la forza di gravità attributi di funzionare correttamente. Vorrei solo andare con il layout relativo. – Falmarri

+0

Senza ridimensionare l'immagine (scaleType) puoi farlo cambiando android: layout_width = "36dip" a "fill_parent". –

+2

Ho sempre problemi con la gravità. Una cosa che potresti provare è mettere l'attributo layout_gravity su * parent * - LinearLayout - invece di ImageView. – MatrixFrog

risposta

2

Il problema è che si utilizza Android: layout_width = "fill_parent" in LinearLayout. cambiarlo in "wrap_content"

+0

Questo, purtroppo, rende solo il wrapping: i limiti del layout lineare sono praticamente uguali (rispetto ai possibili paddings e margini) a quelli di ImageView invece di centrare ImageView all'interno di un LinearLayout maggiore. –

28

È necessario impostare l'orientamento verticale sul 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

Questo ha funzionato per me, bella risposta –

7

Ciò che di solito funziona per me, io avvolgere l'ImageView all'interno di una RelativeLayout quando poi va in un LinearLayout assicurandosi che gli attributi height e width di relativelayout corrispondano a linearLayout. E sai come mantenere l'immagine nel centro della relatività.

<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

Cosa c'è che non va nei ragazzi di 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> 

Impostare l'androide: proprietà gravità della LineraLayout al centro.

12

Siamo spiacenti, ma soprattutto il codice non ha funzionato per me, così ho la pubblicazione il mio codice, che ha lavorato per me è

<?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> 

Spero che aiuta per gli altri che hanno bisogno.

+1

E 'utile per me, quindi, io involo la tua ans :) –

+1

Perfettamente funzionato per me. Grazie !! –

0

È anche possibile farlo con FrameLayout e al suo interno un LinearLayout, quindi è più facile da gestire e più facile da posizionare al centro della vista.

<?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> 

So che stai chiedendo su come centrare un ImageView in un layout, ma ha voluto fornire un altro modo per farlo

Problemi correlati