2012-12-02 9 views

risposta

7

Penso che sia possibile farlo utilizzando il metodo setTheme(). Assicurati di chiamarlo prima di usare setContentView, altrimenti non funzionerà.

Ad esempio:

if(userChoice ==1){ 
    setTheme(android.R.style.Theme_Holo_Light); 
else if(userChoice == 2){ 
    setTheme(android.R.style.Theme_Holo); 
} 

un elenco di temi può essere trovato here

7

Come per un commento sulla risposta postato, se è necessario per passare da una di default Holo Temi, utilizzare questo:

if (mThemeId == R.style.AppTheme.Dark) { 
     mThemeId = android.R.style.Theme_Holo_Light; 
    } else { 
     mThemeId = android.R.style.Theme_Holo; 
    } 
this.recreate(); 

Per utilizzare i temi personalizzati definiti dal file Styles.XML. Per esempio, qualcosa di simile:

<style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar" /> 

<style name="ActionBar.Light" parent="@style/ActionBar"> 
    <item name="android:background">@color/actionbar_background_light</item> 
</style> 

<style name="ActionBar.Dark" parent="@style/ActionBar"> 
    <item name="android:background">@color/actionbar_background_dark</item> 
</style> 

<style name="AppTheme.Light" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/ActionBar.Light</item> 
    <item name="android:windowActionBarOverlay">true</item> 
    <item name="listDragShadowBackground">@android:color/background_light</item> 
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_light</item> 
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_light</item> 
    <item name="menuIconShare">@drawable/ic_menu_share_holo_light</item> 
</style> 

<style name="AppTheme.Dark" parent="@android:style/Theme.Holo"> 
    <item name="android:actionBarStyle">@style/ActionBar.Dark</item> 
    <item name="android:windowActionBarOverlay">true</item> 
    <item name="listDragShadowBackground">@android:color/background_dark</item> 
    <item name="menuIconCamera">@drawable/ic_menu_camera_holo_dark</item> 
    <item name="menuIconToggle">@drawable/ic_menu_toggle_holo_dark</item> 
    <item name="menuIconShare">@drawable/ic_menu_share_holo_dark</item> 
</style> 

definisce questo come una variabile globale nella vostra Activity:

private int mThemeId = -1; 

e impostare il metodo di onCreate() in questo modo:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    if(savedInstanceState != null) { 
     if (savedInstanceState.getInt("theme", -1) != -1) { 
      mThemeId = savedInstanceState.getInt("theme"); 
      this.setTheme(mThemeId); 
     } 
     mTitlesHidden = savedInstanceState.getBoolean("titlesHidden"); 
    } 

    setContentView(R.layout.main); 
} 

E il codice per alternare tra i due temi:

if (mThemeId == R.style.AppTheme.Dark) { 
    mThemeId = R.style.AppTheme.Light; 
} else { 
    mThemeId = R.style.AppTheme.Dark; 
} 
this.recreate(); 

Nota: il tema deve essere impostato prima della chiamata a setContentView()

+0

Perché dovresti definire i propri temi, non solo usare 'android.R.style.DesiredThemeIdHere'? –

+0

@AndreyVoitenkov: non è necessario. Sto semplicemente mettendo la possibilità di utilizzare temi personalizzati e modificarli in fase di esecuzione. Scusa se non fosse necessario. – SSL

Problemi correlati