Подтвердить что ты не робот

Android imageview не уважает maxWidth?

Итак, у меня есть изображение, которое должно отображать произвольное изображение, изображение профиля, загруженное из Интернета. Я хочу, чтобы ImageView масштабировал свое изображение в соответствии с высотой родительского контейнера и шириной max max 60dip. Однако, если изображение имеет высокое отношение по отношению к размеру и не нуждается в полной ширине ширины 60 пикселей, ширина ImageView должна уменьшаться, чтобы фон фонового изображения плотно прилегал к изображению.

Я пробовал это,

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

но это сделало ImageView супер большим по какой-то причине, возможно, оно использовало внутреннюю ширину изображения и wrap_content, чтобы установить его - в любом случае, это не соответствовало моему атрибуту maxWidth.. Это работает только в некоторых типах контейнеров? Это в LinearLayout...

Любые предложения?

4b9b3361

Ответ 1

Ah,

android:adjustViewBounds="true"
Для работы maxWidth требуется

.

Работает сейчас!

Ответ 2

Настройка adjustViewBounds не помогает, если вы используете match_parent, но обходной путь прост. 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);
    }
}