2012-10-06 10 views
5

Ho alcune difficoltà con l'impostazione di un "commutatore di temi" a livello di codice. Vorrei cambiare i temi da app (tra bianco (Theme.Light.NoTitleBar) e Dark (Theme.Black.NoTitleBar)) e quello che faccio è: Ho impostato uno SharedPreference:La modifica del tema non funziona su <4.0 come dovrebbe

final String PREFS_NAME = "MyPrefsFile"; 
    final SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); 
    final SharedPreferences.Editor editor = settings.edit(); 

e di ho un due pulsanti per passare temi (secondo è quasi identico)

Button ThemeWhite = (Button) findViewById(R.id.ThemeWhite); 
    ThemeWhite.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      editor.putBoolean("Theme", false); 
       editor.commit(); 
       System.exit(2); 
     } 
    }); 

e in accattonaggio di ogni attività I controllare SharedPreference

boolean theme = settings.getBoolean("Theme", false); 
    if(theme){ 
     this.setTheme(R.style.Theme_NoBarBlack); 
    } else{ 
     this.setTheme(R.style.Theme_NoBar); 
    } 

    setContentView(R.layout.aplikacja); 

definisco temi in file di styles.xml nei valori delle cartelle:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.Light.NoTitleBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.NoTitleBar" /> 

nei valori-V11:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.Holo.Light.NoActionBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.Holo.NoActionBar" /> 

nei valori-V14:

<resources> 
<style name="Theme.NoBar" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar" /> 
<style name="Theme.NoBarBlack" parent="@android:style/Theme.DeviceDefault.NoActionBar" /> 

file manifesto:

<application 
... 
     android:theme="@style/Theme.NoBar" > 

Tutto sta funzionando eccellente su Android> 4.0 , ma quando uso 2.2 non cambia tema - proprio carattere è sempre bianca come dovrebbe essere, ma non v'è senza sfondo scuro.

ho provato a controllare se almeno funziona e cambiato Theme.NoBarBlack nei valori (per Android < 3.0) e il suo valore lo stesso Theme.NoBar e poi quando ho premuto il pulsante di carattere non è stata modificata -come dovrebbe fare .

EDIT (problema riscontrato): Così dopo aver provato risultasse che su Android 2.2 del file Manifest sfondo insieme e di riposo, e programmaticamente cambiando tema riguardano solo il colore del testo. qualche idea del perché questo accada?

RISPOSTA (come non ho 10 reputazione): su Android 3.0 < importa se

super.onCreate(savedInstanceState); 

È prima di impostare il tema oppure no.

quindi dovrebbe essere:

public void onCreate(Bundle savedInstanceState) { 
    setTheme(R.style.Theme_NoBar); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.lista); 
} 

Scusate ragazzi per fare problema dal nulla, ma come si stava lavorando su> 3.0 ero confuso. Trascorri la metà della giornata lavorativa. :)

risposta

3

C'è un errore nel tuo styles.xml: per Theme.NoBarBlack, hai impostato il genitore su @android:style/Theme.NoActionBar, ma non esiste.

Penso che voglia dire @android:style:Theme.NoTitleBar.

+0

Grazie, ma ho commesso questo errore mentre stavo sperimentando con i temi ecc. E poi ho dimenticato di cambiarlo e copiarlo qui. Quindi qualcos'altro deve causare questo strano comportamento. –

+0

Indovina, ma Theme.NoTitleBar non esiste a quel livello API. Deve essere Theme.Black.NoTitleBar –

+0

@StephanBranczyk [Documentazione Android] (http://developer.android.com/reference/android/R.style.html#Theme_NoTitleBar) dice che 'Theme.NoTitleBar' esiste dal livello API 1. – Kyriog

Problemi correlati