O imageview do Android não respeita maxWidth?

113

Portanto, tenho uma visualização de imagem que deve exibir uma imagem arbitrária, uma imagem de perfil baixada da internet. Eu quero que o ImageView dimensione sua imagem para caber dentro da altura do contêiner pai e uma largura máxima definida de 60dip. No entanto, se a imagem for alta em relação à proporção, e não precisar dos 60 graus de largura completos, a largura do ImageView deve diminuir para que o fundo da visualização se ajuste perfeitamente ao redor da imagem.

Eu tentei isso,

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

mas isso deixou o ImageView super grande por algum motivo, talvez ele usasse a largura intrínseca da imagem e wrap_content para defini-lo - de qualquer maneira, ele não respeitou meu atributo maxWidth. Isso só funciona dentro de alguns tipos de contêineres? Está em um LinearLayout ...

Alguma sugestão?

Juell
fonte

Respostas:

302

Ah,

android:adjustViewBounds="true"

é necessário para que maxWidth funcione.

Funciona agora!

Juell
fonte
obrigado por compartilhar, você pode marcar sua resposta como a correta, por favor !?
WarrenFaith de
1
Muito obrigado .. Funcionou bem para mim :)
Nirav Dangi
7
e programaticamente: imageView.setAdjustViewBounds (true);
Cyril Jacquart
7
Para qualquer um que encontrar esta descoberta não funciona, certifique-se de que a largura / altura não estão definidas como match_parent.
Kevin Worth
E aqui estou roubando o ImageView interno especial do AOSP que supostamente foi criado para respeitar esses limites.
TheWanderer
4

A configuração adjustViewBoundsnão ajuda se você usar match_parent, mas a solução alternativa é um personalizado simples 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);
    }
}
Se sentir bem
fonte
1
AdjustViewBounds parece funcionar bem com uma largura match_parent para mim.
Cory Petosky