Android imageview no respeta maxWidth?


Entonces, tengo una imageview que debería mostrar una imagen arbitraria, una imagen de perfil descargada de Internet. Quiero que ImageView escale su imagen para que quepa dentro de la altura del contenedor padre, y un ancho máximo establecido de 60dip. Sin embargo, si la imagen es alta en relación, y no necesita el ancho completo de 60dip, el ancho de la ImageView debe disminuir para que el fondo de la vista se ajuste perfectamente a la imagen.

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 eso hizo que ImageView super grande por alguna razón, tal vez usó el ancho intrínseco de la imagen y wrap_content para configurarlo - de todos modos, no respetó mi atributo maxWidth.. ¿Eso solo funciona dentro de algunos tipos de contenedores? Está en un plano lineal...

Alguna sugerencia?

Author: juell, 2010-08-20

2 answers

Ah,

android:adjustViewBounds="true"

Es necesario para que maxWidth funcione.

Funciona ahora!

 269
Author: juell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-08-20 11:23:19

La configuración adjustViewBounds no ayuda si usa match_parent, pero la solución es simple personalizada 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
Author: FeelGood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-16 18:29:05