0

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

深色主题在任何地方都正确应用。

浅色主题是好的,除了操作栏的文本颜色(它是黑色而不是白色)和我的preferenceactivity,它由一个主preferencescreen 和一些内部preferencescreens 组成。内部屏幕具有正确的主题(操作栏文本颜色除外)。但外部偏好屏幕(主屏幕)具有深色背景和深色文本颜色。所以我猜文本颜色选择正确,但背景颜色没有。通过 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,如果这很重要的话。

有人可以在这里帮助我吗?

4

1 回答 1

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);
   ...
 }
}
于 2013-05-18T21:31:05.160 回答