2010-06-11 12 views
14

Estoy cargando la navegación desde un sitio web, donde cada elemento tiene un título, una descripción y una imagen. Quiero tener todos los títulos y descripciones centrados en el mismo eje.Establecer el ancho máximo de ImageView como porcentaje del ancho de su matriz

Estoy usando el siguiente diseño para cada elemento en un ListView. Funciona bien cuando las imágenes son la mitad de ancho que altas, pero no si son más anchas: el texto va debajo de la imagen.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:orientation="horizontal"> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 
     <LinearLayout 
      android:orientation="vertical" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1"> 
      <TextView 
       android:layout_height="wrap_content" 
       android:textSize="10pt" 
       android:id="@+id/title" 
       android:gravity="center_horizontal" 
       android:layout_width="fill_parent" /> 
      <TextView 
       android:layout_height="wrap_content" 
       android:id="@+id/description" 
       android:layout_width="fill_parent" 
       android:gravity="center_horizontal" /> 
     </LinearLayout> 
     <View 
      android:layout_height="fill_parent" 
      android:layout_width="fill_parent" 
      android:layout_weight="3" /> 
    </LinearLayout> 
    <ImageView 
     android:id="@+id/icon" 
     android:adjustViewBounds="true" 
     android:layout_width="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_centerVertical="true" 
     android:layout_height="wrap_content" /> 
</RelativeLayout> 

¿Es posible forzar la imagen para permanecer en el 25% del ancho de la RelativeLayout o menos?

Respuesta

15

Esto no puede hacerse en el XML. Debería especificar el tamaño en el código. Que haría que en el onCreate() de la actividad:

[Editado:. Agregado de importación, notación flotador]

import android.widget.LinearLayout.LayoutParams; 
... 
obj.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 
            LayoutParams.WRAP_CONTENT, 
            0.25f)); 

Esto significa uso 100% de la altura de los padres, pero 25% de la matriz de anchura .

+0

Creo que esto debe ser LinearLayout.LayoutParams, y el 0.25 debe ser 0.25f para funcionar. – thomas88wp

+0

@ thomas88wp Obviamente, este código requiere la importación de LinearLayout.LayoutParams. Además, 0.25 y 0.25f son lo mismo en Java debido al punto decimal. – Emmanuel

+4

perdón por aclarar el punto, pero en java '0.25' es un doble literal, y '0.25f' es un literal flotante. Si un parámetro requiere un flotante (como en este caso), no se compilará si lo pasa un doble (aunque al revés funciona, ya que el flotante se puede convertir implícitamente en un doble pero no al revés). Para demostrar, intente compilar 'public void foo (barra flotante) {foo (0.5); } '- no funcionará hasta que agregue la 'f'. – thomas88wp

Cuestiones relacionadas