如何在所有活动中实施暗模式?

时间:2020-09-18 23:13:28

标签: java android

当我单击“夜间模式”按钮时,它仅适用于activity_main,而其他活动则不是夜间模式。

Switch mSwitchNightMode = (Switch) menu.findItem(R.id.item_switch)
              .getActionView().findViewById(R.id.Switchedbtn);

      // Get state from preferences
      if (isNightModeEnabled()) {
          mSwitchNightMode.setChecked(true);
      } else {
          mSwitchNightMode.setChecked(false);
      }

      mSwitchNightMode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
              if (isNightModeEnabled()) {
                  setIsNightModeEnabled(false);
                  setAppTheme(R.style.NightMode);
              } else {
                  setIsNightModeEnabled(true);
                  setAppTheme(R.style.AppTheme);
              }

              // Recreate activity
              recreate();
          }
      });

1 个答案:

答案 0 :(得分:0)

您不能以这种方式将MainActivity的选定样式应用于其他Activity。 创建每个活动时,您应该从首选项中检查状态,并相应地设置主题。

建议您在整个应用程序中使用一个主题。 主题应该这样声明

<style name="MyTheme" parent="Theme.AppCompat.DayNight"> 

然后,您应该在AndroidManifest.xml的application标签内添加此主题

<application
    android:name="pkg"
    android:theme="@style/MyTheme"
/>

最后,您可以在“应用程序”类的“首选项”中检查状态 然后像这样涂黑

   if(isNightModeEnabled()){
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
   }else{
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
   }