我有一个PreferenceFragment
允许用户选择主题的设置。用户可以选择深色或浅色主题。选择主题后,用户按下后退按钮返回到上一个片段。这调用了包含活动的 onCreate 方法,在该方法中读取和应用主题。但是主题应用不正确,从 Holo.Light 切换到 Holo.Dark 会更改背景颜色、操作栏等,但不会更改文本,导致文本褪色、难以阅读。任何想法我做错了什么?我读过的所有内容都说主题应该应用于 onCreate 方法,这就是我正在做的事情。
在此先感谢您的帮助。
编辑
这里要求的是相关代码。
public class MainActivity extends Activity {
private ActionBarDrawerToggle mSlideMenuToggle;
private boolean isDarkTheme;
private static final String InitializedKey = "initialized";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
applySettings();
setContentView(R.layout.activity_main);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (mSlideMenuToggle.onOptionsItemSelected(item)) {
return true;
} else if (item.getItemId() == R.id.menu_settings) {
getFragmentManager().beginTransaction()
.replace(R.id.content_frame, new SettingsFragment())
.addToBackStack(null)
.commit();
return true;
} else {
return super.onOptionsItemSelected(item);
}
}
private void applySettings() {
isDarkTheme = PreferenceManager.getDefaultSharedPreferences(this).getString(SettingsFragment.ThemeSetting, null).equals("1");
if (isDarkTheme) {
setTheme(android.R.style.Theme_Holo);
} else {
setTheme(android.R.style.Theme_Holo_Light);
}
}
该onCreate
方法通过调用将当前主题应用于活动applySettings
。选项菜单允许SettingsFragment
创建一个。
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
public static final String ThemeSetting = "isDarkTheme";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
}
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(ThemeSetting)) {
String[] themes = getResources().getStringArray(R.array.isDarkThemeStrings);
findPreference(key).setSummary(sharedPreferences.getString(key, "").equals("0") ? themes[0] : themes[1]);
}
}
@Override
public void onResume() {
super.onResume();
PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this);
}
@Override
public void onPause() {
super.onPause();
PreferenceManager.getDefaultSharedPreferences(getActivity()).unregisterOnSharedPreferenceChangeListener(this);
}
}
有SettingsFragment
一个设置,主题可以有两个值之一,暗或亮。用户选择一个,然后点击返回按钮。这会导致调用 的onCreate
方法MainActivity
,再次应用设置但不正确。
任何人?我觉得一旦主题被更改,SettingsFragment
然后按下后退按钮,主题应该被应用,MainActivity
但事实并非如此。大多数元素发生变化,但文本保持黑暗(从 Holo.Light 到 Holo.Dark)。