2010-07-20 30 views
24

El siguiente código XML no funciona para centrar un ImageView en un LinearLayout:¿Cómo centrar un ImageView en 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> 

Y este es el código RelativeLayout que, sorprendentemente, funciona:

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

Puede alguien decirme por qué? ¡Gracias!

+0

que nunca podría conseguir la gravedad atributos de funcionar correctamente. Me gustaría ir con el diseño relativo. – Falmarri

+0

Sin escalar la imagen (scaleType) puede hacerlo cambiando android: layout_width = "36dip" a "fill_parent". –

+2

Siempre tengo problemas con la gravedad. Una cosa que puede intentar es colocar el atributo layout_gravity en * parent * - LinearLayout - en lugar de ImageView. – MatrixFrog

Respuesta

2

El problema se debe a que usa android: layout_width = "fill_parent" en LinearLayout. cambiarlo a "wrap_content"

+0

Esto, lamentablemente, hace que solo el ajuste: los límites de disposición lineal sean prácticamente iguales (con respecto a los posibles rellenos y márgenes) a los de ImageView en lugar de centrar ImageView dentro de LinearLayout mayor. –

28

Usted tiene que fijar la orientación vertical en su 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

Esto funcionó para mí, buena respuesta –

7

Lo que generalmente funciona para mí, pronto enrolle el imageview dentro de un RelativeLayout cuando luego entra en una LinearLayout asegurándose de que los atributos de altura y ancho de relativelayout coinciden con linearLayout. Y usted sabe cómo mantener la vista de la imagen en el centro de la diagramación relativa.

<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

¿Qué pasa con los chicos de 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> 

Establecer el androide: propiedad de la gravedad de su LineraLayout al centro.

12

Lo sentimos, pero por encima de código no funcionó para mí, así que publicar mi código que funcionó para mí es

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

espero que ayude a otros que necesitan.

+1

Me es útil, entonces, renuncié a tu ans :) –

+1

Perfectamente trabajado para mí. ¡Gracias! –

0

También puede hacerlo con un FrameLayout y dentro de él un LinearLayout por lo que es más fácil de administrar y más fácil de poner en el centro de la 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> 

sé que estás preguntando cómo centrar un imageview en un diseño, pero querían proporcionar otra manera de hacerlo

Cuestiones relacionadas