сбой реализации темного режима на реальном устройстве, но не на виртуальном устройстве - PullRequest
0 голосов
/ 03 февраля 2020

Я определил изменение темы в настройках списка как (завышено в SettingsActivity):

 <ListPreference
        app:defaultValue="default"
        app:entries="@array/themes_labels"
        app:entryValues="@array/themes_color"
        app:key="@string/Theme"
        app:useSimpleSumm"theme"
        app:title=aryProvider="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>

Теперь, хотя я пытался следуйте инструкциям dark theme , я не понимал такие переменные, как configuration.uiMode, и, следовательно, я реализовал как (в MainActivity):

@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);
      }
    }
    super.onCreate(savedInstanceState);
    mContext = getApplicationContext();
    Bundle bundle = new Bundle();

Хотя это нормально работает на эмуляторе , в моем реальном устройстве, он резко падает. Но, поскольку у меня нет никакого способа увидеть, что происходит, у меня нет никакой подсказки.

Может ли кто-нибудь любезно помочь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...