Как изменить background нескольких activity?

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

Могу я как-то это сделать? Смог изменить background только той activity, на которой находится кнопка, но при переходе на другой экран приложения и обратно все возвращается в прежнее состояние.


Ответы (2 шт):

Автор решения: Анастасия

Один из вариантов - использовать SharedPreferences. Данные, которые хранятся в SharedPreferences доступны в любом activity. По нажатию на кнопку Вы можете записать в них переменную, которая будет обозначать нужный Вам background, например, цвет или название, по которому Вы будете определять установленный фон.

Для того, чтобы это сделать при нажатии на кнопку, нужно:

  1. Создать константу для имени файла настроек, например, так:

    public static final String APP_PREFERENCES = "mysettings";

  2. Далее нужно создать параметры, которые вы хотите сохранять в настройках. Удобнее их сделать константами:

public static final String APP_PREFERENCES_BACKGROUND = "myBackground";

  1. Объявить переменную SharedPreferences mSettings; и внутри метода onCreate() инициализировать эту переменную:

mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);

  1. При нажатии на кнопку в методе onClick() нужно прописать:
    Editor editor = mSettings.edit();
    editor.putString(APP_PREFERENCES_BACKGROUND, "тут значение, которое Вы хотите сохранить");
    editor.apply();
  1. Во всех Activity в onCreate() получайте эти данные и изменяйте фон, как Вам нужно. Для этого:
if(mSettings.contains(APP_PREFERENCES_BACKGROUND)) {
    string myBg = mSettings.getString(APP_PREFERENCES_BACKGROUND, "");
}

Строка myBg будет содержать сохранённое значение, которое Вы можете использовать для установки нужного фона.

Вот тут можно больше почитать про SharedPreferences.

→ Ссылка
Автор решения: Mark Cain

Вы можете использовать темы.

  1. Определить тему для всего приложения, но не для отдельной активити.

    <application android:theme="@style/CustomTheme">

  2. style.xml например:

<style name="CustomTheme" parent="android:Theme.Light">
    <item name="android:background">@color/white_opaque</item>
    <item name="android:windowBackground">@color/white_opaque</item>
    <item name="android:colorBackground">@color/white_opaque</item>
</style>
  1. метод setTheme() в активити.
→ Ссылка