Android imageview, не дотримуючись maxWidth?


113

Отже, у мене є перегляд зображень, який повинен відображати довільне зображення, зображення профілю, завантаженого з Інтернету. Я хочу, щоб це ImageView масштабувало його зображення, щоб воно відповідало внутрішній висоті батьківського контейнера, і встановити максимум ширини 60 dpip. Однак якщо зображення високе за співвідношенням і йому не потрібна повна ширина 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 ...

Будь-які пропозиції?

Відповіді:


302

Ах,

android:adjustViewBounds="true"

потрібна для роботи максимальної ширини.

Працює зараз!


thx для спільного використання, чи можете ви позначити свою відповідь правильною будь ласка !?
WarrenFaith

1
Дякую багато .. Добре працювали для мене :)
Нірав Дангі

7
і програмно: imageView.setAdjustViewBounds (вірно);
Кирило Жакрт

7
Для тих, хто стикається з цим висновком, він не працює, переконайтеся, що ширина / висота не встановлені на відповідність.
Кевін Ворт

І ось я вкрав спеціальний внутрішній ImageView AOSP, який нібито був створений для дотримання цих меж.
The Wanderer

4

Налаштування 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);
    }
}

1
Здається, налаштування ViewVounds для мене добре працює з шириною відповідності.
Cory Petosky
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.