1

有人可以告诉我如何在运行时在我的应用程序中将主题从全息切换到全息光吗?我想在设置中有两个按钮来选择浅色或黑色主题。如何在应用程序范围内设置它,而不仅仅是针对活动?

我已经用 setTheme() 尝试了一些东西,但是当我点击一个按钮时我无法改变主题。

这是我想设置主题的设置活动:

public class SettingsActivity extends Activity  {

@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {


setTheme(android.R.style.Theme_Holo_Light);

super.onCreate(savedInstanceState);

setContentView(R.layout.settings);

}

好吧,这很有效,我的主题已设置,但正如我所说,我想通过按下按钮在系统范围内更改它。

谢谢 !

4

2 回答 2

3

您无法更改其他应用程序的主题(谢天谢地)。

实现这一点的唯一方法是创建您自己的操作系统版本,并使用您自己的主题作为设备默认主题。但是,不使用设备默认主题的应用程序(即他们明确地将主题设置为 Holo、Holo light 等)将不会获得设备默认主题。

编辑 - 要使用基本 Activity 在应用程序范围内完成此操作,请创建一个如下所示的 Activity:

public class BaseActivity extends Activity {
    private static final int DEFAULT_THEME_ID = R.id.my_default_theme;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        int themeId = PreferenceManager.getDefaultSharedPreferences(context)
                .getInt("themeId", DEFAULT_THEME_ID);
        setTheme(themeId);

        super.onCreate(savedInstanceState);
    }
}

然后你的所有活动都应该扩展这个 BaseActivity。当您想要更改主题时,请务必将其保存到您的 SharedPreferences。

于 2013-10-16T17:10:16.873 回答
3

如您所见,主题设置在onCreate()and before上setContentView()oncreate()所以当你想改变主题时,你应该再次调用该方法。但是这个onCreate()函数在一个Activity的生命周期中只会被调用一次。

有一个简单的方法可以做到这一点。我不确定这是最好的方法。

假设您想在单击按钮时将新主题应用于Activity 1 。

在 onClick 事件中

  1. 保存要应用的主题,以便即使在应用程序重新启动后也应该保留它(可以使用首选项或静态可变变量)。
  2. 完成当前活动(活动 1)并调用新活动(活动 2)。

现在在活动 2

  1. 调用活动 1并完成当前活动(活动 2)。

活动 1

  1. 在里面应用保存的主题onCreate

希望它不会令人困惑.. :)

于 2013-10-17T04:31:22.963 回答