2009-12-01 6 views
11

Attualmente ho un momento difficile per la chiamata a getApplicationContext().setTheme() in un'attività, voglio solo applicare una risorsa tema in un ambito applicazione invece di ambito attività nello stile del codice, ma il problema è che questo non funziona affatto, può qualcuno lo spiega.Perché getApplicationContext(). SetTheme() in un'attività non funziona?

Grazie mille!

Egli è il codice di scheletro:

public class StartUp extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    /* 
    * setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
    * //that works! 
    */ 
     this.getApplicationContext().setTheme(
      android.R.style.Theme_Black_NoTitleBar_Fullscreen); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
    } 
} 

risposta

10

Ho avuto lo stesso problema prima e non ho trovato un modo per risolvere questo problema. Solo dio sa perché, ma ho persino visto gli ingegneri di framework Android (credo fosse Dianne Hackborn) dire che l'impostazione di temi come questo è scoraggiata.

Impostare invece il tema per la tua attività nel Manifest, e funzionerà.

+3

Ecco la segnalazione di bug: http: // code .google.com/p/android/issues/detail? id = 4394 – stealthcopter

2

Quando si chiama setTheme() sul contesto applicativo? Deve essere chiamato prima di istanziare qualsiasi vista.

+0

Grazie per la risposta, io chiamo il metodo prima di istanziare qualsiasi persona, ma ancora non funziona .. – user221778

+0

Ha funzionato per me dopo aver spostato setTheme prima di setContentView – OldSchool4664

-2

Non l'ho provato io stesso, ma se fosse assolutamente necessario impostare il tema in modo programmatico, la prossima cosa che proverei sarebbe derivare una classe da Applicazione e sovrascrivere il metodo onCreate come nel seguente:

public class MyApplication extends android.app.Application { 
    @Override 
    public void onCreate() { 
     super.onCreate(); 
     setTheme(android.R.style.Theme_Black_NoTitleBar_Fullscreen); 

    } 
} 
11

è possibile utilizzare setTheme(..) prima di chiamare setContentView(...) e super.oncreate() e dovrebbe funzionare bene

+5

Faccio call prima di setContentView e prima di super.onCreaete ma non funziona ancora. –

0

è possibile utilizzare setTheme(..) prima di chiamare setContentView(...) e super.oncreate() e dovrebbe funzionare bene

E 'fissato in sdk 4.0 (potrebbe essere prima).