Android - как заново раздуть вид иерархии - PullRequest
1 голос
/ 12 мая 2011

У меня проблемы с тем, чтобы моя активность реагировала на изменение темы (т.е. изменение Theme_Dark на Theme_Light).

В Activity этот код ниже работает нормально, и тема изменяется при создании Activity (метод getPreferenceTheme () просто получает значение предпочтения темы, которое было установлено с помощью PreferenceActivity).

protected void onCreate(Bundle savedInstanceState) {
    setTheme(getPreferenceTheme());
    super.onCreate(savedInstanceState);
    setContentView(R.layout.controls);
}

Но как я могу динамически изменить тему? Поэтому после того, как я изменил тему в PreferenceActivity и вернулся к основному действию, как я могу изменить его?

Я знаю, что я могу перезапустить Activity, чтобы сделать это (снова вызывая onCreate ()), но я не хотел этого делать и слышал, что возможно «заново раздувать иерархию представления» в onResume () - как мне это сделать?

Я попробовал следующее (удар в темноте), но без радости.

protected void onResume() {
    super.onResume();    
    LayoutInflater inflater = LayoutInflater.from (this);
    View v = inflater.inflate (R.layout.controls, null);
    setTheme(getPreferenceTheme());
    setContentView(v);
}

Любая помощь высоко ценится, M.

1 Ответ

0 голосов
/ 04 марта 2013

Попробуйте "воссоздать" метод Activity.

http://developer.android.com/reference/android/app/Activity.html#recreate()

Вызовите его после установки новой темы.

...