Android imageview nie respektuje maxWidth?

Więc mam imageview, który powinien wyświetlać dowolny obraz, zdjęcie profilowe pobrane z Internetu. Chcę, aby ImageView skalował swój obraz, aby zmieścił się wewnątrz wysokości kontenera nadrzędnego i ustawił maksymalną szerokość 60 dip. Jeśli jednak obraz jest wysoki pod względem proporcji i nie wymaga pełnego 60 dip szerokości, szerokość obrazu powinna się zmniejszać, aby tło obrazu dobrze pasowało do obrazu.

Próbowałem tego,

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

Ale to sprawiło, że ImageView bardzo duży z jakiegoś powodu, może użył wewnętrznej szerokości obrazu i wrap_content, aby go ustawić - w każdym razie nie respektował mojego atrybutu maxWidth.. Czy to działa tylko wewnątrz niektórych rodzajów kontenerów? Znajduje się w linii prostej...

Jakieś sugestie?
Author: juell, 2010-08-20

2 answers

Ah,

android:adjustViewBounds="true"

Jest wymagane do działania maxWidth.

Działa!
 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/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-20 11:23:19

Ustawienie adjustViewBounds nie pomaga, jeśli używasz match_parent, ale obejście jest proste, niestandardowe 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/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 18:29:05