Не позволяйте ImageView выдвигать представления за пределы экрана - PullRequest
8 голосов
/ 13 марта 2012

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

Проблема в том, что просмотр изображения занимает весь экран. Само изображение не, но представление делает. Я не могу понять это. Как вы можете видеть из моего xml, я не использую fill_parent для просмотра изображений и перепробовал все возможные значения scaleType для изображения.

Есть предложения? Также, если это помогает, я собираюсь на Android API 8

Редактировать: я изменил ниже XML, чтобы вы могли использовать именно то, что я написал. (Это изображение, которое я использую в представлении изображения: http://i.imgur.com/qN5aT.jpg)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="#FFFFFF" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitStart"
        android:src="@drawable/quote_sample_img" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="This is text" />
    </LinearLayout>

</LinearLayout>

http://i.imgur.com/m3msH.png (Извините, не хватает репутации, чтобы опубликовать реальное изображение)

Ответы [ 4 ]

12 голосов
/ 13 марта 2012

Кажется, что все работает, если в ImageView добавлен android: layout_weight = "1.0".

(Я не уверен, что именно происходит и в каком порядке в алгоритме макета, поэтому не могу объяснить, почему.)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#FFFFFF" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1.0"
        android:scaleType="fitStart"
        android:src="@drawable/quote_sample_img" />

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:orientation="vertical" >

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="This is text" />
    </LinearLayout>

</LinearLayout>
1 голос
/ 03 апреля 2012

Это wrap_content на изображении - исходный файл, вероятно, слишком высокий.

Используйте это в ImageView, чтобы после масштабирования область изображения восстановила новый размер изображения:

android:adjustViewBounds="true"

Я бы также изменил высоту ImageView, чтобы он заполнил экран и заставил вашу полосу всегда быть внизу:

android:layout_height="0dip" // faster than match_parent for weight
android:layout_weight="1.0"
0 голосов
/ 19 марта 2012

У меня очень похожая проблема, опубликованная в https://stackoverflow.com/questions/9765401/imageview-with-adjustviewbounds-seems-to-ignore-following-elements

Кажется, что ImageView НЕ сжимается после масштабирования изображения, ЕСЛИ ВЫ не укажете Adjustviewbounds = "true".

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

0 голосов
/ 13 марта 2012

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

Кроме того, если вы хотите, чтобы нижняя полоса всегда была видимой, лучше использовать RelativeLayout вместо этого, например:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    style="@style/Main" 
    android:orientation="vertical" >
    <LinearLayout   
        android:id="@+id/bottom_bar"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="bottom"
        android:layout_alignParentBottom="true"
        android:orientation="vertical" >
        <include layout="@layout/browse_bottom_bar" />
    </LinearLayout>

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@id/bottom_bar"
        android:src="@drawable/quote_sample_img" />
</RelativeLayout>
...