В андроиде фоновое изображение не меняется при ориентации - PullRequest
3 голосов
/ 01 марта 2011

У меня есть линейный макет для моей ActivityGroup, как определено

<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:mtx="http://schemas.android.com/apk/res/com.matriksdata"
  android:id="@+id/homeActivityGroupBG"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical"
  android:background="@drawable/background">

И у меня есть 2 фоновых рисунка, расположенных в папках drawable-land и drawable-land. Когда ориентация меняется, все нормально, но фон не меняется в соответствии с ориентацией. Он всегда сохраняет самый первый рисунок для фона.

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

background.setBackgroundResource(R.drawable.background);

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

Редактировать: я создаю theme.xml, чтобы определить фоновое изображение для окна. XML-файл содержит:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme" parent="android:Theme">
<item name="android:windowBackground">@drawable/background</item>
</style>
</resources>

Я изменил AndroidManifest.xml как

<application android:icon="@drawable/icon" android:label="@string/app_name"
android:debuggable="true" android:name="com.matriksdata.app.DefaultApplication"
android:theme="@style/Theme">

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

Есть ли другой способ заставить рисовать графические объекты, когда ориентация делает? Или есть какая-то причина, по которой приложение вызывает утечки памяти?

Редактировать: из-за проблемы утечки памяти я задал вопрос на Проблема использования памяти Android при возможном использовании ActivityGroup

1 Ответ

2 голосов
/ 02 марта 2011

Вместо того, чтобы переключать рисование при изменении ориентации, вы можете вместо этого переключить макет. Поместив файл XML с тем же именем в папку layout-land / , ОС загрузит этот альтернативный макет, когда ориентация экрана будет горизонтальной. Таким образом, вы всегда будете использовать правильное рисование (так как они могут быть указаны по-разному в каждом из двух XML-файлов), и есть дополнительное преимущество, заключающееся в том, что вы можете независимо оптимизировать макет для обеих ориентаций!

В этом посте в блоге разработчика Android предлагаются некоторые советы и рекомендации о том, как сохранить объекты при изменении ориентации и избежать утечек памяти в процессе; которая будет иметь дополнительную помощь для вас.

...