изменение темы в Java не меняет цвет фона - PullRequest
4 голосов
/ 19 сентября 2011

Я пытаюсь изменить тему во время выполнения с помощью java-кода, потому что я хочу, чтобы пользователь мог изменять тему приложения через меню настроек. Итак, я разрешаю пользователю тему, а затем читаю результаты примерно так:

if (...) {
    getApplication().setTheme(R.style.BlackTheme);
} else {
    getApplication().setTheme(R.style.LightTheme);
}

к сожалению, по какой-то причине это не работает .... цвет шрифта слегка изменяется от более темного серого (светлая тема) до более яркого серого (черная тема) но фон всегда остается белым / черным (в зависимости от того, какая тема изначально выбрана в файле манифеста)

Если я полностью удалю запись темы в файле манифеста, то это как если бы я выбрал черную тему ....

.... я что-то пропускаю?

Ответы [ 3 ]

1 голос
/ 12 июня 2013

У меня была та же проблема, и я решил ее следующим образом.

@Override
public void onCreate(Bundle savedInstanceState) {

    if (getIntent().hasExtra("bundle") && savedInstanceState==null){
        savedInstanceState = getIntent().getExtras().getBundle("bundle");
    }

    //add code for theme

    switch(theme)
    {
    case LIGHT:
        setTheme(R.style.LightTheme);
        break;
    case BLACK:
        setTheme(R.style.BlackTheme);
        break;

    default:
    }
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //code

}

этот код предназначен для воссоздания Пакета сохранения активности и изменения темы.Вы должны написать свой собственный onSaveInstanceState (Bundle outState);Из API-11 вы можете использовать метод refreshate () вместо

Bundle temp_bundle = new Bundle();
onSaveInstanceState(temp_bundle);
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("bundle", temp_bundle);
startActivity(intent);
finish();
0 голосов
/ 26 января 2016

Это известная проблема: https://code.google.com/p/android/issues/detail?id=3793

Вы должны изменить цвет фона вручную, setTheme() не изменит его.

0 голосов
/ 24 апреля 2012

Вы не можете установить тему приложения во время выполнения.Если вы хотите изменить тему повсюду в вашем приложении, вы должны вызвать

setTheme (resId)

в качестве первого шага в onCreate (). Activity.

Например:

@ Переопределить public void onCreate (Bundle saveInstanceState) {setTheme (resId)}

Если вы хотите изменить тему уже запущенных действий, то вы должны воссоздать их.

...