2010-01-23 30 views
18

Mi diseño de diseño es un TextView con texto largo y un ImageView a la derecha de TextView. Quiero centrar el ImageView en su elemento primario verticalmente, así que utilicé android: layout_centerVertical = "true", pero resultó que ImageView estaba alineado con la parte inferior de su elemento principal. Si no utilizo la propiedad layout_centerVertical, ImageView se alineará con la parte superior de su elemento primario. ¿Como puedó resolver esté problema? Gracias.¿Cómo centrar un ImageView verticalmente en su elemento primario?

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" android:layout_height="wrap_content" 
    android:background="#000000"> 
    <ImageView android:id="@+id/t3" android:layout_width="wrap_content" 
     android:layout_height="wrap_content" android:src="@drawable/arrow_right" 
     android:layout_alignParentRight="true" android:background="#ff0000" 
     android:layout_centerVertical="true" android:scaleType="centerInside" /> 
    <TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="This a very very very very very very very very very very very very very very very very long sentence" 
     android:textColor="#231ACC" android:layout_toLeftOf="@id/t3" /> 
</RelativeLayout> 

Respuesta

3

Se puede usar un LinearLayout con layout_width y layout_height conjunto a fill_parent y la gravedad establecido en vertical_center.

Algo como esto:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center_vertical|center_horizontal" 
     android:orientation="horizontal"> 

     <EditText 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:id="@+id/input_field" 
      android:gravity="left" 
      android:layout_weight="1" 
      android:text="Left Aligned"/> 
       <EditText 
      android:id="@+id/input_field" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:gravity="right" 
      android:layout_weight="1" 
      android:text="Right Aligned"/> 
    </LinearLayout> 
</LinearLayout> 
+0

Podría publicar su archivo XML? – user256239

+0

El ejemplo del código proviene de algo en lo que estuve trabajando hace un par de días en el que necesitaba centrar horizontal y verticalmente una fila de campos de entrada de texto. La tarea que describes suena similar. – JeremyFromEarth

+0

En mi ejemplo, es diferente. Quiero que el tamaño de ImageView a la derecha de TextView sea exactamente el tamaño de la imagen que contiene ImageView. Entonces tu ejemplo no funciona para mi caso. – user256239

9

cambio android:layout_height="wrap_content" a android:layout_height="fill_parent" de RelativeLayout y añadir a android:layout_centerVertical="true" Vista de Texto, que funcionará como encanto.

+0

¡Gracias! ¡Estaba buscando algo que funcionaría en RelativeLayout! –

+0

layout_gravity es una propiedad de LinearLayout, no RelativeLayout. No es necesario ajustar ImageView en RelativeLayout. – erin

29

Trate android:layout_gravity="center_vertical"

+0

Debería ser 'android: layout_gravity =" center_vertical "' en su lugar. – papaiatis

+0

papaiatis es correcto, utilice "layout_gravity" y asegúrese de no mezclar \t \t \t androide: gravedad = "centro" y Android: layout_gravity = "centro" –

+5

layout_gravity no es apropiado para RelativeLayout. Deberías usar keep android: layout_centerVertical = "true" y asegurate de que android: layout_height = fill_parent – erin

3

Esto pondrá su imagen a la altura del centro de Es padre:

android:layout_gravity="center_vertical"

Demostración:

<LinearLayout 
    android:layout_width="fill_parent" 
    android:layout_height="64dp" 
    android:orientation="horizontal"> 
    <ImageView 
     android:layout_width="48dip" 
     android:layout_height="48dip" 
     android:src="@drawable/ic_launcher" 
     android:contentDescription="Application icon" 
     android:layout_gravity="center_vertical" /> 

</LinearLayout> 
17

Añadir este atributo xml para que el niño lo desea centrarse dentro de su padre:

android:layout_centerInParent="true" 

Esto lo centrará vertical u horizontalmente.

+4

El padre tiene que ser un 'RelativeLayout' para que esto funcione. – KVISH

+0

@KVISH esto es cierto. Como en la pregunta del OP, el padre tiene que ser un 'RelativeLayout'. – abriggs

1

Simplemente añadir lo siguiente:

androide: layout_gravity = "center_vertical | center_horizontal"

Cuestiones relacionadas