我有一个设置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
有一个设置,主题可以有两个值之一,黑暗或光明。用户选择一个,然后点击后退按钮。这导致调用MainActivity
的onCreate
方法,再次应用设置但不正确。
有人吗?我觉得一旦SettingsFragment
中的主题被更改,然后按下后退按钮,主题应该应用于MainActivity
,但事实并非如此。大多数元素都会改变,但文字保持黑暗(从Holo.Light到Holo.Dark)。
到目前为止您尝试过的更多细节/代码会有所帮助。您是否明确定义了要更改的文本?你是怎么做到的? –
请参阅我的编辑。 – shortspider
我假设在某一时刻您正在完成该活动(并且您可能希望在PreferenceActivity中使用PreferenceFragment而不是普通的PreferenceFragment)?另外,文本的问题也是针对'ActionBar'还是只是视图(如果你使用的话)? – Luksprog