在我的应用程序中,我让用户选择他想要使用的主题(黑暗或浅色)。主题在styles.xml中定义如下:
<style
name="but"
parent="android:style/Widget.Holo.ActionButton">
</style>
<style
name="bar"
parent="android:style/Widget.Holo.ActionBar.Solid">
</style>
<style
name="Theme_Flo"
parent="android:Theme.Holo">
<item name="android:buttonStyle">@style/but</item>
<item name="android:actionBarStyle">@style/bar</item>
</style>
<style
name="Theme_Flo_Light"
parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:buttonStyle">@style/but</item>
<item name="android:actionBarStyle">@style/bar</item>
</style>
黑暗主题适用于任何地方。
除了动作栏的文本颜色(它是黑色而不是白色)和我的首选项活动(包括主要的首选屏幕和一些内部偏好屏幕)之外,灯光主题还可以。 内部屏幕具有正确的主题(动作栏文本颜色除外)。但是外部首选屏幕(主屏幕)具有深色背景和深色文本颜色。所以我猜文本颜色是正确选择的,但背景颜色没有。 通过android:background在settings.xml中设置背景颜色无效。 我在内部偏好屏幕上发现了几个关于黑屏的帖子,但不是这样。
主题在onCreate方法中应用,如下所示:
public class SettingsApp extends PreferenceActivity implements OnSharedPreferenceChangeListener, OnPreferenceChangeListener {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(TimeMateActivity.theme.equals("0")) {
setTheme(R.style.Theme_Flo);
}else{
setTheme(R.style.Theme_Flo_Light);
}
addPreferencesFromResource(R.layout.settings);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
...
}
}
我已经检查过选择了正确的主题。
Target和Min Api版本是17,如果这很重要。
有人可以帮助我吗?
答案 0 :(得分:1)
在setTheme
之前移动super.onCreate(savedInstanceState);
,以便您的代码如下所示:
public class SettingsApp extends PreferenceActivity implements OnSharedPreferenceChangeListener, OnPreferenceChangeListener {
public void onCreate(Bundle savedInstanceState) {
if (TimeMateActivity.theme.equals("0")) {
setTheme(R.style.Theme_Flo);
} else {
setTheme(R.style.Theme_Flo_Light);
}
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.layout.settings);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
...
}
}