2010-08-20 15 views
100

Por lo tanto, tengo una vista de imagen que debe mostrar una imagen arbitraria, una imagen de perfil descargada de Internet. Quiero que este sea el ImageView para escalar su imagen para que quepa dentro de la altura del contenedor principal, y un ancho máximo establecido de 60dip. Sin embargo, si la imagen es alta en relación a la relación, y no necesita 60 ppp de ancho, el ancho de ImageView debe disminuir para que el fondo de la vista quede ajustado alrededor de la imagen.Android imageview no respetando maxWidth?

He intentado esto,

<ImageView android:id="@+id/menu_profile_picture" 
    android:layout_width="wrap_content" 
    android:maxWidth="60dip" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="2dip" 
    android:padding="4dip" 
    android:scaleType="centerInside" 
    android:background="@drawable/menubar_button" 
    android:layout_centerVertical="true"/> 

pero que hizo que el ImageView súper grande por alguna razón, tal vez utilizan el ancho intrínseco de la imagen y wrap_content para configurarlo - de todos modos, que no respetó mi anchoMax atributo ... ¿Funciona solo dentro de algunos tipos de contenedores? Está en un LinearLayout ...

¿Alguna sugerencia?

Respuesta

259

Ah,

android:adjustViewBounds="true" 

se requiere para anchoMax para trabajar.

¡Funciona ahora!

+0

THX para compartir, se puede marcar su respuesta como la correcta por favor !? – WarrenFaith

+0

dosent trabajo para mí !! –

+1

Muchas gracias ... Funcionó bien para mí :) –

1

Setting adjustViewBounds no ayuda si se utiliza match_parent, pero solución es simple costumbre ImageView:


public class LimitedWidthImageView extends ImageView { 
    public LimitedWidthImageView(Context context) { 
     super(context); 
    } 

    public LimitedWidthImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public LimitedWidthImageView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     int specWidth = MeasureSpec.getSize(widthMeasureSpec); 
     int maxWidth = getMaxWidth(); 
     if (specWidth > maxWidth) { 
      widthMeasureSpec = MeasureSpec.makeMeasureSpec(maxWidth, 
        MeasureSpec.getMode(widthMeasureSpec)); 
     } 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } 
} 
+1

adjustViewBounds parece funcionar bien con un ancho de match_parent para mí. –

Cuestiones relacionadas