Ночной режим не работает должным образом - почему? - PullRequest
1 голос
/ 20 февраля 2020

Я применил темный режим, используя экран настроек следующим образом:

  <ListPreference
        app:defaultValue="default"
        app:entries="@array/themes_labels"
        app:entryValues="@array/themes_color"
        app:key="theme"
        app:title="@string/Theme"
        app:useSimpleSummaryProvider="true"/>
  </PreferenceCategory>

, а массивы определены как

<resources>
  <array name="themes_labels">
    <item>"Default"</item>
    <item>"Light"</item>
    <item>"Dark"</item>
  </array>

  <string-array name="themes_color">
    <item>"Default"</item>
    <item>"Light"</item>
    <item>"Dark"</item>
  </string-array>
</resources>

Теперь, в MainActivity onCreate, я хочу измените тему на:

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
      AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
    } else {
      AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
    }
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
//    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    String theme = sharedPref.getString("theme", "Default");
//    Toast.makeText(this, theme, Toast.LENGTH_LONG).show();
    if (theme.equals("Dark")) {
      AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    } else if (theme.equals("Light")) {
      AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    } else {
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
      } else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
      }
    }

Теперь проблема в том, что при Light или по умолчанию (даже если default равно dark mode, например, включено сохранение батареи), все в порядке. Но, если выбран тёмный режим, то я сталкиваюсь со многими проблемами, например, не применяется фрагмент или даже приводит к cra sh в некоторых случаях.

Я очень плохо знаком с android и не понимаю, почему это происходит. Пожалуйста, помогите.

Пытается решить эту проблему здесь

...