Измените и примените тему во время выполнения в Android

Возможный дубликат:
Как для изменения текущей темы во время выполнения в Android

У меня есть приложение для Android, в котором я разрешаю пользователям переключаться между темами во время выполнения. Сменить тему просто, но тема не применяется пока действие не будет воссоздано. Я нашел способ применить тему к текущему действию, но если пользователь нажимает кнопку «Назад», на предыдущих экранах по-прежнему сохраняется старая тема. Как я могу изменить тему для этих занятий? Пример приложения, которое его поддерживает: Задачи бесплатно


person Giorgi    schedule 10.07.2012    source источник


Ответы (2)


Динамически во время выполнения вызовите setTheme () в методе onCreate () вашей активности перед вызовом setContentView (). Чтобы изменить тему, вам просто нужно перезапустить свою деятельность.

См. этот файл ...!

Также хочу увидеть это и this ... Надеюсь, это поможет ...!

person Strider    schedule 13.07.2012
comment
Перезапуск действия работает для текущего, но когда пользователь нажимает кнопку «Назад», предыдущие действия по-прежнему имеют старую тему. Это потому, что onCreate не вызывается, когда пользователь возвращается, поэтому я не могу установить тему. - person Giorgi; 13.07.2012
comment
Вы хотите установить постоянную тему, как живые обои, сделайте одно приложение, а затем в настройках вы можете добавить другой стиль ..! @Giorgi - person Strider; 13.07.2012
comment
Это не отвечает на вопрос. Перезапуск действия работает для текущего отображаемого, но как мне применить его к другим действиям, когда пользователь щелкает обратно? - person Giorgi; 19.07.2012
comment
@Giorgi Вызовите второстепенное действие из основного с помощью starActivityForResult(). Когда вторичная активность возвращается, для них автоматически вызывается основной onActivityResult() метод. Для изменения темы вы можете вернуть код результата в основное действие, чтобы оно знало, что нужно изменить тему. Как уже было сказано, смена темы требует воссоздания деятельности. Что касается кнопки возврата, переопределите метод onBackPressed() вторичного действия, чтобы он сначала создавал намерение для возврата к основному действию, а затем вызывал finish() для завершения вторичного действия. - person Luis Mendo; 12.08.2013

Я полагаю, это всего лишь намек:

Перед finish(); звонком

setResult(AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme);

Теперь во всех ваших действиях реализуйте onActivityResult

protected void onActivityResult(int request, int result, Intent data) {
    if(result == AnIntegerThatNotifiesThePreviousActivitiesToChangeTheme)
    {
        //update the current theme
    }
}

Другое решение (лучше):

Реализуйте класс, сохраняющий тему:

public class CurrentThemeHolder {
    private CurrentThemeHolder() {
    }
    private static instance;
    public static getInstance() {
        if(instance == null)
            return new CurrentThemeHolder();
        else
            return instance;
    }
    private int mTheme; //identifier of the theme
    public getTheme() {
        return mTheme;
    }
    public setTheme(int newTheme){
        mTheme = newTheme;
    }
}

Теперь позвольте всем вашим действиям расширить эту ThemeActivity:

public class ThemeActivity extends Activity {
    private int mTheme;
    protected void onResume() {
        if(mTheme != CurrentThemeHolder.getInstance().getTheme()) {
            //do what you should do to set the theme
            mTheme = CurrentThemeHolder.getInstance().getTheme();
            //everytime you set the theme save it
            //this maybe should be done in onCreate()
        }
    }
}
person Sherif elKhatib    schedule 12.07.2012
comment
привет, шериф, я хотел узнать от вас, может ли быть какое-либо решение, при котором я получаю цветовой код из Интернета и, в соответствии с этим, я могу изменить цвет всех моих кнопок во время выполнения, не переходя ко всем конкретным кнопкам и не применяя цвет BackGround, может ли быть какое-либо решение с использованием тема или стиль? Пожалуйста, поделитесь любым предложением, которое у вас есть. - person MKJParekh; 20.03.2014
comment
У вас бесконечное количество цветов? или просто ограниченный набор цветов? - person Sherif elKhatib; 21.03.2014
comment
У меня, скажем, ограничено 20 цветов, но эти 20 загружаются с сервера, поэтому они могут варьироваться от одного времени к другому, вкратце цвета составляют около 15-20 (не исправлены), и эти цветовые коды также не исправлены. Один из пользователей предложил использовать CustomViews stackoverflow.com/questions/22529646/ - person MKJParekh; 22.03.2014