Почему я получаю пустое место сверху и снизу моего ImageView в моем RelativeLayout?

Я использую relativelayout для наложения на изображения. На всех размерах экрана, которые я тестировал (от 2,7 до 10,1 дюйма), я всегда получаю пустое место поверх моего изображения. В моей среде IDE я всегда вижу, что мой relativelayout вызывает дополнительное пространство сверху и снизу моего изображения.

Почему? Я установил все атрибуты высоты wrap_content и даже добавил атрибут adjustViewBounds.

Примечание. Вы должны знать, что мой образ намного больше по размеру, что означает, что будет какое-то масштабирование.

Спасибо за ваши советы!

Вот код:

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

<LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical" 
    android:focusable="true"
android:focusableInTouchMode="true">

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="@string/bgf"
    android:textColor="#000000"
    android:textSize="25sp" />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >

    <ImageView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:adjustViewBounds="true"
        android:paddingRight="5dp"
        android:paddingLeft="5dp"
        android:paddingBottom="5dp"
        android:layout_gravity="center_horizontal"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/cde"
        android:contentDescription="@string/cde" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:adjustViewBounds="true"
        android:layout_gravity="center_horizontal"
        android:layout_centerVertical="true"
    android:layout_centerHorizontal="true"
        android:src="@drawable/fgh"
        android:contentDescription="@string/abc" />

</RelativeLayout>


</LinearLayout>
</ScrollView>

Ответ 1

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

Чтобы получить более четкое понимание, я предлагаю вам сделать следующее:

  • Установите цвет фона относительного макета на цвет

Теперь вы можете понять пространство между imageView и relativelayout.

После того, как вы проверили это на своем устройстве, выполните следующие изменения и повторите попытку

  • Задайте атрибут scaleType = "fitXY" в вашем изображении.

Это сделает изображение масштабированным и займет всю область, доступную для ImageView. (Соотношение сторон исходного изображения будет потеряно в этом случае). Теперь вы узнаете объем области, в которой занимался imageView.

Я полагаю, что как только вы это сделаете, вы можете заключить, что:

  • В первом запуске, если вы установили фон relativeLayout как черный, он не будет виден, так как imageView занимает всю область, не оставляя пробелов.

  • Во втором запуске изображение будет охватывать всю высоту и ширину, хотя соотношение сторон было потеряно. Следовательно, это указывает на то, что imageView покрывает ширину и высоту и не остается места, его соотношение сторон изображения, то есть проблема

Если вы придете к другому результату в целом, пожалуйста, сообщите нам, мы сможем его решить.

ИЗМЕНИТЬ:

Пожалуйста, удалите прокладки, которые вы указали для ImageView тоже

Ответ 2

У меня была точная проблема. После долгой борьбы я решил это, следуя этому

** fooobar.com/info/119555/...

и добавьте следующее в мою программу

 android:adjustViewBounds="true"

Он отлично работает