Как изменить background нескольких activity?
Я создаю проект для учебы и в моем приложении есть семь activity. Я хочу поменять background всех activity нажатием на кнопку, но не знаю как это сделать. Никакой информации об этом не нашел, что удручает.
Могу я как-то это сделать? Смог изменить background только той activity, на которой находится кнопка, но при переходе на другой экран приложения и обратно все возвращается в прежнее состояние.
Ответы (2 шт):
Один из вариантов - использовать SharedPreferences. Данные, которые хранятся в SharedPreferences доступны в любом activity. По нажатию на кнопку Вы можете записать в них переменную, которая будет обозначать нужный Вам background, например, цвет или название, по которому Вы будете определять установленный фон.
Для того, чтобы это сделать при нажатии на кнопку, нужно:
Создать константу для имени файла настроек, например, так:
public static final String APP_PREFERENCES = "mysettings";Далее нужно создать параметры, которые вы хотите сохранять в настройках. Удобнее их сделать константами:
public static final String APP_PREFERENCES_BACKGROUND = "myBackground";
- Объявить переменную
SharedPreferences mSettings;и внутри методаonCreate()инициализировать эту переменную:
mSettings = getSharedPreferences(APP_PREFERENCES, Context.MODE_PRIVATE);
- При нажатии на кнопку в методе onClick() нужно прописать:
Editor editor = mSettings.edit();
editor.putString(APP_PREFERENCES_BACKGROUND, "тут значение, которое Вы хотите сохранить");
editor.apply();
- Во всех
ActivityвonCreate()получайте эти данные и изменяйте фон, как Вам нужно. Для этого:
if(mSettings.contains(APP_PREFERENCES_BACKGROUND)) {
string myBg = mSettings.getString(APP_PREFERENCES_BACKGROUND, "");
}
Строка myBg будет содержать сохранённое значение, которое Вы можете использовать для установки нужного фона.
Вы можете использовать темы.
Определить тему для всего приложения, но не для отдельной активити.
<application android:theme="@style/CustomTheme">
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>
- метод setTheme() в активити.