Растяжение изображения

API 7 (2.1)

Я использую изображения с высоким разрешением для папки drawable-hdpi моего приложения.

В нижней части экрана у меня есть LinearLayout с шириной fill_parent. Внутри у меня есть 3 LinearLayouts с весом 1. Внутри них у меня есть ImageView. По сути, у меня есть 3 пространства одинакового размера для 3 изображений.

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">   
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image1"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center"
            android:padding="0dip">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image2"
                />
        </LinearLayout>
        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:gravity="center">
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:src="@drawable/image3"
                />
        </LinearLayout>
    </LinearLayout>

Когда телефон находится в ландшафтном режиме, все выглядит нормально.

Когда телефон находится в портретном режиме, изображения уменьшаются, потому что их ширина слишком велика для их 1/3 места на экране. Изображения по-прежнему выглядят нормально.

Вот моя проблема:

Мои изображения масштабируются нормально, но кажется, что LinearLayouts, обертывающие каждое изображение, не масштабируют свою высоту.

В ландшафтном режиме верхняя и нижняя части LinearLayouts, оборачивающие изображения, имеют общий край. Это означает, что верхняя часть ImageView выравнивается с верхней частью LinearLayout, обертывающей его, а нижняя часть ImageView выравнивается с нижней частью LinearLayout, обертывающей его. Другими словами, высота LinearLayout == высоте ImageView.

В портретном режиме верхняя и нижняя части LinearLayouts, обертывающие изображения, имеют кучу пространства между ними и верхней и нижней частью изображений, почти как отступы. Другими словами, высота LinearLayout > высоты ImageView. Это нежелательно.

Любые идеи?

Это почти похоже на изменение размера LinearLayout и ImageView, затем сжатие ImageView, а затем не изменение размера LinearLayout...


person Andrew    schedule 05.05.2011    source источник
comment
Кто-нибудь? У меня сейчас эта проблема в нескольких местах.   -  person Andrew    schedule 06.05.2011
comment
а) Что вы тестируете? и б) Как вы выравниваете LinearLayout по нижней части экрана, так как это может повлиять на его высоту.   -  person Joseph Earl    schedule 12.05.2011
comment
@Andrew: чтобы иметь равные интервалы слева и справа, вы можете использовать атрибуты android:layout_marginLeft или android:layout_marginRight. Вы также можете использовать прокладку.   -  person Lavanya    schedule 12.05.2011


Ответы (3)


Вы можете попробовать разработать отдельные макеты для обеих ориентаций. В папке res вашего проекта создайте подпапку с именем layout-land. Там скопируйте или создайте новый макет с таким же названием. Таким образом, у вас будет полный контроль над макетом в любой ориентации.

Поскольку вы используете android:layout_weight="1", не должны ли linearLayouts одинаково разделять пространство, поэтому появится дополнительное пространство?

РЕДАКТИРОВАТЬ: кажется, что ImageView увеличивает свою высоту, когда LinerLayout имеет установленный вес. Добавьте эту строку в каждый из ваших ImageViews:

Android: настроить ViewBounds = "истина"

person Lumis    schedule 11.05.2011
comment
Слева и справа должно быть одинаковое пространство, да. Но поскольку высота равна wrap_content, дополнительное пространство не должно появляться выше и сдуваться. Это моя проблема. - person Andrew; 11.05.2011
comment
Надо будет попробовать на своей системе. У меня были похожие проблемы, когда макет в теории должен был работать, но не работал на практике, поэтому мне пришлось экспериментировать и искать обходной путь. - person Lumis; 11.05.2011

Я знаю, что это не отвечает на заданный вами вопрос, но кажется, что было бы лучше избежать множества проблем, изменив ориентацию вашего линейного макета на вертикальную при изменении ориентации устройства. Я считаю, что вы можете сделать это с помощью OrientationEventListener.

person Jim Clay    schedule 06.05.2011

Я полагаю, что лучше иметь другой макет, предназначенный для портретного режима. Не используйте один и тот же макет для портретного и ландшафтного режимов. Было бы лучше иметь разные макеты для портретного и ландшафтного режимов, чтобы управление дизайном было в наших руках.

person Lavanya    schedule 12.05.2011