0

アプリにダークモードを実装しようとしています。PreferenceFragment現在、ネストされたを使用して UI モードを明るいモードと暗いモードに切り替えようとしていAppCompatActivityます。アプリは、デフォルト値としてライト テーマから開始して、次のように動作します。

  • ListPreference で「暗い」を選択すると、設定の概要が変わりますが、UI はこれと他のすべてのアクティビティで明るいままです。
  • もう一度「ダーク」を選択すると、バックスタック内の他のアクティビティと同様に、アクティビティがダーク テーマに切り替わります。
  • 明るいテーマに戻したいときは、同じことが逆に起こります。

したがって、基本的にはすべて機能しますが、ListPreference で目的の値を 2 回選択する必要があります。ListPreference のコード:

final Preference listPreferenceDesign = findPreference(PREF_DESIGN);
listPreferenceDesign.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
    @Override
    public boolean onPreferenceChange(Preference preference, Object o) {
            if (((ListPreference) preference).getValue().equals("light")) {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            } else if (((ListPreference) preference).getValue().equals("dark")) {
                AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            }
            return true;
    }
});

私がこれまでに試したこと:

  • ステートメントgetActivity.recreate()の前に呼び出すreturn true;
  • 少しgetActivity.recreate()遅れて、Handler
  • ブール値が true の場合に親アクティビティthis.recreate()のメソッドを呼び出すonResume()changedDesignSetting

今後ともよろしくお願いいたします。

4

1 に答える 1