Android 如何从应用程序中更改为全息暗/光主题?

Android 如何从应用程序中更改为全息暗/光主题?,android,Android,我知道这是可能的,所以如果我有一个设置,我可以在全息。光和全息之间切换,但是,我似乎无法找到如何切换。感谢您的帮助 我认为您可以使用setTheme()方法来实现这一点。只需确保在使用setContentView之前调用它,否则它将无法工作 例如: if(userChoice ==1){ setTheme(android.R.style.Theme_Holo_Light); else if(userChoice == 2){ setTheme(android.R.style.The

我知道这是可能的,所以如果我有一个设置,我可以在全息。光和全息之间切换,但是,我似乎无法找到如何切换。感谢您的帮助

我认为您可以使用
setTheme()
方法来实现这一点。只需确保在使用
setContentView
之前调用它,否则它将无法工作

例如:

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

根据发布的答案评论,可以找到主题列表,如果您需要在默认全息主题之间切换,请使用以下选项:

if (mThemeId == R.style.AppTheme.Dark) {
        mThemeId = android.R.style.Theme_Holo_Light;
    } else {
        mThemeId = android.R.style.Theme_Holo;
    }
this.recreate();
使用
style.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>
@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);
}
并将onCreate()方法设置为:

<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>
@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()

之前必须设置主题为什么要定义自己的主题,而不仅仅是使用
android.R.style.DesiredThemeIdHere
?@AndreyVoitenkov:这不是必需的。我只是考虑使用自定义主题并在运行时更改它们的可能性。对不起,如果没有必要的话。