これは私のアプリのために行った方法です。私のアプローチが助けになると確信しています。
は次のように
のstyles.xmlにあなたの光と闇のテーマを設定します。
<!-- Use this theme in Manifest by default -->
<style name="MyLightTheme" parent="Base.AppTheme.Light"></style>
<!-- Base light theme containing all styles -->
<style name="Base.AppTheme.Light" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
... Other styles
</style>
<!-- Use this to switch to Dark theme -->
<style name="MyDarkTheme" parent="Base.AppTheme.Dark"></style>
<!-- Base dark theme containing all styles -->
<style name="Base.AppTheme.Dark" parent="Theme.AppCompat">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
... Other styles
</style>
お好み経由テーマの変更を制御しているので、あなたのPreferenceFragmentに設定変更リスナーを登録します。
PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged ()を実装します。
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (key.equals(getString(R.string.pref_key_nighttheme))) {
if (sharedPreferences.getBoolean(getString(R.string.pref_key_nighttheme), false)) {
// Night theme enabled
getActivity().setTheme(R.style.MyDarkTheme);
getActivity().getApplication().setTheme(R.style.MyDarkTheme);
darkTheme = true;
} else {
getActivity().setTheme(R.style.MyLightTheme);
getActivity().getApplication().setTheme(R.style.MyLightTheme);
darkTheme = false;
}
getActivity().recreate(); // This is important. It allows the theme change to take effect.
}
}
戻るナビゲーションMainActivityにつながる場合は、あなたのMainActivityでonResume()を再作成してください。
また、あなたはがのonCreate()で呼び出されスーパー()の前に、すべての活動で、現在のテーマを確認する必要があります。
isThemeDark = setDarkTheme(this);
setDarkTheme()SharedPreferenceを介して電流のテーマをチェックし、私が作成したヘルパーです。テーマの変更が必要かどうかをチェックします。ここで
public static boolean setDarkTheme(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean isDarkTheme = prefs.getBoolean(context.getString(R.string.pref_key_nighttheme), false);
context.setTheme(SettingsActivity.darkTheme ? R.style.MyDarkTheme : R.style.MyLightTheme);
return isDarkTheme;
}
は、ナイトモードがNewslet私のアプリで動作する方法は次のとおりです。
UPDATE: アンドロイドは現在、正式にAPPCOMPAT 白黒モードテーマ経由ナイトモードをサポートしています。 同じものにtutorialがあります。
の表情を持っていますが、どのように私はすべてのレイアウトを変更することができます_SettingsActivity_の_CheckBox_から、単純に1つのスタイルでアプリの私が持っているすべてのビューは独自の "パーソナライゼーション"を持っています – Pier
独自のスタイルを作成し、マニフェストファイルからすべてのアクティビティのスタイルを変更することができます。 – RadiBarq
私が求めているのは明らかではないかもしれません...マニフェストから1つのアクティビティにつき1つのスタイルを変更する必要はありません。 私は上記の編集の画像で見ることができるように、他のパーソナライズの中で、アプリ全体のマルチプルテーマ(緑、青、黒、白、赤)を切り替えることができる、SettingsActivityが必要です。 レイアウトにはそれぞれ異なるビューがありますので、私の意見では、スタイルの変更をすべて行うことは難しいです – Pier