gpt4 book ai didi

android - setTheme() 没有完全覆盖 list 应用程序主题

转载 作者:行者123 更新时间:2023-11-30 02:14:19 24 4
gpt4 key购买 nike

我设置了两个不同的主题,一个扩展Theme.AppCompat,另一个扩展Theme.AppCompat.Light:

<style name="MyTheme" parent="Theme.AppCompat"></style>
<style name="MyTheme.Light" parent="Theme.AppCompat.Light"></style>

在我的 Manifest 文件中,我放置了以下两者之一:

<application
android:theme="@style/MyTheme.Light">

但是我希望用户能够在主题之间切换,所以我在 Activity 的 onCreate() 方法中覆盖了这个参数:我从 SharedPreference 中检索要设置的主题s,然后使用 setTheme(int id) 进行设置:

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
loadTheme();
setContentView(R.layout.a_main);
}

public void loadTheme() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String key = "theme";
String theme = prefs.getString(key, getDefault(key));
if (theme.equals("dark")) {
setTheme(R.style.MyTheme);
} else { setTheme(R.style.MyTheme_Light); }
}

这可能适用于所有主题值,异常(exception)背景颜色(应该是android:windowBackground)。该颜色值不受我的 setTheme() 调用的影响,并保持我放入 list 文件中的值。

即,如果我设置 @style/MyTheme.Light 背景将始终为白色,无论我用 setTheme() 做什么。同样,如果我在 list 中设置 @style/MyTheme,我的背景将保持黑色。为什么会这样,我该怎么办?

最佳答案

如果您的备用主题包括对窗口的更改,您需要在调用 super.onCreate(..) 之前调用 setTheme:

@Override
protected void onCreate(Bundle savedInstanceState) {
loadTheme();
super.onCreate(savedInstanceState);
setContentView(R.layout.a_main);
}

public void loadTheme() {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String key = "theme";
String theme = prefs.getString(key, getDefault(key));
if (theme.equals("dark")) {
setTheme(R.style.MyTheme);
} else { setTheme(R.style.MyTheme_Light); }
}

关于android - setTheme() 没有完全覆盖 list 应用程序主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29608486/

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