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
は 1 つの設定、Theme があり、Dark または Light の 2 つの値のいずれかを持つことができます。ユーザーはいずれかを選択し、戻るボタンを押します。これにより、 のonCreate
メソッドMainActivity
が呼び出され、設定が再度適用されますが、正しくは適用されません。
誰?でテーマを変更してSettingsFragment
から戻るボタンを押すと、テーマが適用されるはずですMainActivity
が、そうではありません。ほとんどの要素は変更されますが、テキストは暗いままです (Holo.Light から Holo.Dark に変わります)。