Android Imageview скрывает элементы ниже при изменении ориентации

Столкнулся с проблемой при изменении ориентации экрана. Когда телефоны в портретном режиме, все работает нормально, но когда я меняю ориентацию на альбомный режим, изображение скрывает кнопку ниже.

Вот мои макеты xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:longClickable="false">


<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Your Inbox"
    android:id="@+id/btn_inbox"
    android:layout_centerHorizontal="true" />

<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/imageView"
    android:layout_below="@+id/btn_inbox"
    android:scaleType="fitCenter"
    android:adjustViewBounds="true"
    android:src="@drawable/img_main" />

<Button
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Scan QR"
    android:id="@+id/btn_qrscan"
    android:layout_below="@+id/imageView"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentEnd="true"
    android:enabled="false" />


person Mike    schedule 27.08.2015    source источник
comment
android:configChanges=orientation|screenSize используйте эту строку в manifest.xml в месте вашей активности. Это помогло моей проблеме   -  person S HemaNandhini    schedule 16.10.2018


Ответы (4)


Конечно, потому что размер изображения может соответствовать размеру экрана в портретной ориентации. Если вы хотите просмотреть все, вам необходимо:

  • Уменьшить размер изображения
  • Играйте со свойством «вес» компонентов в представлении
  • Добавьте Scrollview, если вы хотите использовать прокрутку
person Víctor Martín    schedule 27.08.2015
comment
свойство веса используется только для linearlayout. я пробовал, но если я использую фиксированный вес макета, он может работать в альбомной ориентации, но не работает в портретном режиме, как должен. может быть, я должен изменить его с помощью кода при изменении ориентации? какова наилучшая практика? Спасибо - person Mike; 27.08.2015

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

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

person Vamsi Challa    schedule 27.08.2015

Пожалуйста, попробуйте это

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:longClickable="false"
    android:orientation="vertical"
    tools:context=".MainActivity">
    <Button
        android:id="@+id/btn_inbox"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="Your Inbox" />

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:adjustViewBounds="true"
        android:scaleType="fitCenter"
        android:src="@drawable/background" />

    <Button
        android:id="@+id/btn_qrscan"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:enabled="false"
        android:text="Scan QR" />


</LinearLayout>
person Pratap    schedule 27.08.2015
comment
Спасибо за ответ. я пробовал, но потом, когда я переключаюсь с ландшафтного на портретный режим, он все еще не отображается правильно, слишком большой зазор. нет ли способа, которым я могу разместить все на экране, сохраняя при этом правильные пропорции? - person Mike; 27.08.2015
comment
я обновил с новым xml. Вы можете попробовать это с весом изображения = 1 - person Pratap; 27.08.2015
comment
создайте такой же файл макета с тем же именем и поместите его в папку layout-land с теми же компонентами с ландшафтным дизайном - person Pratap; 27.08.2015

Я решил проблему, используя эту строку в AndroidManifest.xml.

 android:configChanges="orientation|screenSize"
person S HemaNandhini    schedule 16.10.2018