gpt4 book ai didi

android - 如何在 Android 运行时更改当前主题

转载 作者:IT老高 更新时间:2023-10-28 12:57:35 25 4
gpt4 key购买 nike

我创建了一个 PreferenceActivity,允许用户选择他想要应用到整个应用程序的主题。

当用户选择主题时,会执行以下代码:

if (...) {
getApplication().setTheme(R.style.BlackTheme);
} else {
getApplication().setTheme(R.style.LightTheme);
}

但是,即使我用调试器检查了代码正在执行,我也看不到用户界面有任何变化。

主题是在res/values/styles.xml中定义的,Eclipse不会显示任何错误。

<resources>
<style name="LightTheme" parent="@android:style/Theme.Light">
</style>

<style name="BlackTheme" parent="@android:style/Theme.Black">
</style>
</resources>

对可能发生的情况以及如何解决有任何想法吗?我应该在代码中的任何特殊点调用 setTheme 吗?如果有帮助,我的应用程序包含几个 Activity 。

最佳答案

我也想看看这个方法,你为你的所有 Activity 设置一次。但据我所知,您必须在显示任何 View 之前设置每个 Activity 。

作为引用检查:

http://www.anddev.org/applying_a_theme_to_your_application-t817.html

编辑(从那个论坛复制):

    protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// Call setTheme before creation of any(!) View.
setTheme(android.R.style.Theme_Dark);

// ...
setContentView(R.layout.main);
}


编辑
如果您在 super.onCreate(savedInstanceState); 之后调用 setTheme 您的 Activity 会重新创建,但如果您在 super.onCreate(savedInstanceState) 之前调用 setTheme ); 你的主题将设置和 Activity 不再重新创建

  protected void onCreate(Bundle savedInstanceState) {
setTheme(android.R.style.Theme_Dark);
super.onCreate(savedInstanceState);


// ...
setContentView(R.layout.main);
}

关于android - 如何在 Android 运行时更改当前主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2482848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com