2012-06-21 8 views
9

Chcę setTheme do działania w czasie wykonywania, Mam wyszukiwania niektórych rozwiązań przez google. ktoś powiedział wezwanie setTheme przed robót onCreate i setContentView CAN, odcinek kod jakJak ustawićTeme do działania w czasie wykonywania? To nie działa wywołanie setTheme przed onCreate i setContentView

public void onCreate(Bundle savedInstanceState) { 
    setTheme(android.R.style.Theme_Translucent_NoTitleBar); 
    super.onCreate(savedInstanceState); 
    ... 
    setContentView(...) 
} 

ale to nie działa, chciałbym wiedzieć, czy istnieje inne rozwiązanie może setTheme do aktywności?

+1

Wystarczy spróbować - ustawić motyw po 'super.onCreate (savedInstanceState);' 'setContentView i przed (...)' – Praveenkumar

+0

@hermanbrain: Zawsze zadzwonić 'Super .onUtwórz (...) 'po raz pierwszy w swojej metodzie' onCreate (...) ', chyba że masz zamiar zmodyfikować' Pakiet ', który mu przekazujesz. Jak mówi SpK, wywołaj 'setTheme (...)' po wywołaniu 'super.onCreate (...)'. – Squonk

+0

Ten sam problem, próbowałem nawet umieścić go tak jak powiedział praveen, ale bez powodzenia. Zrobiłem niestandardowy motyw w style.xml i dodałem linię setTheme (R.style.MyCustomTheme); czy muszę zrobić cokolwiek innego? –

Odpowiedz

11

Wystarczy spróbować - ustawić motyw po super.onCreate(savedInstanceState); i przed setContentView(...)

jak poniżej kodu -

public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setTheme(android.R.style.Theme_Translucent_NoTitleBar); // Set here 
    setContentView(...) 
} 
+2

Próbowałem tego, ale pokazuje czarne tło, możesz mi pomóc. – mdDroid

4

Właściwie to tylko pracował dla mnie, jeśli mogę ustawić go przed wywołaniem super.onCreate(savedInstanceState);

public void onCreate(Bundle savedInstanceState) 
{ 
    final int themeRes = getIntent().getIntExtra(EXTRA_THEME_ID, 0); 
    if (themeRes != 0) setTheme(themeRes); 
    super.onCreate(savedInstanceState); 
    //ect... 
} 
2
setContentView(...); 
setTheme(R.style.MyTheme); 
setContentView(...); 

To musi działać dobrze ..

Więcej na tematy, przeczytaj ten http://entertheinfinity.blogspot.in/2016/06/designing-android-interface-themes.html

+0

Proszę wyjaśnić, dlaczego twój kod rozwiązuje problem OP. –

+0

Używam tej techniki do zmiany motywu w Aktywności początkowej aplikacji. Dzieje się tak dlatego, że w onCreate nie ma widoku (tzn. Nie jest załadowany pasek akcji ani widok w działaniu), w którym można ustawić motyw. Ustawienie motywu przed setContentView() jest jak Ustawienie tematu na NULL Wyświetl. Moja analogia. Zawsze możesz zdecydować. Dzięki – Umesh

Powiązane problemy