PreferenceActivity的主题问题

时间:2013-05-18 19:10:19

标签: android themes preferenceactivity

在我的应用程序中,我让用户选择他想要使用的主题(黑暗或浅色)。主题在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,如果这很重要。

有人可以帮助我吗?

1 个答案:

答案 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);
   ...
 }
}