2012-12-02 47 views

回答

7

我认为你可以通过使用setTheme()方法。只要确保在使用setContentView之前调用它,否则它将无法工作。

例如:

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

主题的列表可以发现here

7

按照在回答所发布注释,如果你需要将默认霍洛主题之间切换,使用此:

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

使用您自己的Styles.XML文件中定制的主题。例如,像这样:

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

Activity将此定义为一个全局变量:

private int mThemeId = -1; 

和设置您的onCreate()方法是这样的:

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

而代码在两个主题之间切换:

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

注意:主题必须在您拨打setContentView()之前设置

+0

为什么要定义自己的主题,而不仅仅是使用'android.R.style.DesiredThemeIdHere'? –

+0

@AndreyVoitenkov:没有必要。我只是在使用自定义主题并在运行时更改它们的可能性。对不起,如果这是不必要的 – SSL

相关问题