2012-12-02 4 views

Répondre

7

Je pense que vous pouvez le faire en utilisant la méthode setTheme(). Assurez-vous juste que vous l'appelez avant d'utiliser setContentView, ou cela ne fonctionnera pas.

Par exemple:

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

Une liste des thèmes se trouve here

7

Selon un commentaire sur la réponse affiché, si vous avez besoin pour basculer entre la valeur par défaut Holo Thèmes, utilisez ceci:

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

Pour utiliser vos propres thèmes personnalisés à partir de votre fichier Styles.XML. Par exemple, quelque chose comme ceci:

<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> 

Definit une variable globale dans votre Activity:

private int mThemeId = -1; 

et de définir votre méthode onCreate() comme ceci:

@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); 
} 

Et la code pour basculer entre les deux thèmes:

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

Remarque: Le thème doit être défini avant votre appel à setContentView()

+0

Pourquoi définiriez-vous vos propres thèmes, et pas seulement 'android.R.style.DesiredThemeIdHere'? –

+0

@AndreyVoitenkov: Ce n'est pas nécessaire. Je ne fais que mettre la possibilité d'utiliser des thèmes personnalisés et de les changer au moment de l'exécution. Désolé si c'était inutile. – SSL

Questions connexes