4

我正在制作一个 Android 应用程序。我为黑暗模式制作了另一个 UI。所以这就是我需要的;该应用程序将在当地时间自动切换到深色主题。例如,当太阳下山时,应用程序将切换到暗模式。

或者另一种选择是通过一天中的预设时间切换到暗模式。希望你能理解我的问题。如果有人知道,请帮助我,如果可能的话,我更喜欢第一个选项。提前致谢。

4

2 回答 2

5

也许你可以看看AppCompatDelegate.setDefaultNightMode()

您只需使用 DayNight 的父级定义您的主题:

<style name="MyTheme" parent="Theme.AppCompat.DayNight">    
<!-- Blah blah -->
</style>

每种风格都有:

<style name="Theme.AppCompat.DayNight" 
       parent="Theme.AppCompat.Light" />

或者

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

然后你可以打电话:AppCompatDelegate.setDefaultNightMode()

使用其中之一:

MODE_NIGHT_NO. Always use the day (light) theme.
MODE_NIGHT_YES. Always use the night (dark) theme.
MODE_NIGHT_FOLLOW_SYSTEM (default). This setting follows the system’s setting, which on Android Q and above is a system setting (more on this below).
MODE_NIGHT_AUTO_BATTERY. Changes to dark when the device has its ‘Battery Saver’ feature enabled, light otherwise.
MODE_NIGHT_AUTO_TIME & MODE_NIGHT_AUTO. Changes between day/night based on the time of day.

您通常会在自己的自定义应用程序类中执行此操作:

public class MyApplication extends Application {

    public void onCreate() {
        super.onCreate();        
        AppCompatDelegate.setDefaultNightMode(
            AppCompatDelegate.MODE_NIGHT_YES);
    }
}

更多信息在这里

于 2019-12-02T07:31:48.817 回答
4

快捷方式:

public class MainActivity extends BaseActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //restore preferences
        SharedPreferences settings0 = this.getSharedPreferences(PREFS_NAME, 0);
        lightMode = settings0.getBoolean("key0", true);

        //retrieve selected mode
        if (lightMode) {

            //light mode
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);

        } else {

            //dark mode
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
        }

        Switch switch0 = findViewById(R.id.Switch0);
        switch0.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                if (darkMode) {

                    text = "Mode: light";

                    //light mode
                    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_NO);

                    darkMode = false;

                } else {

                    text = "Mode: dark";

                    //dark mode
                    getDelegate().setLocalNightMode(AppCompatDelegate.MODE_NIGHT_YES);

                    darkMode = true;
                }

                //save music preferences
                SharedPreferences setting0 = getSharedPreferences(PREFS_NAME, 0);
                SharedPreferences.Editor editor0 = setting0.edit();
                editor0.putBoolean("key0", darkMode);
                editor0.apply();
            }
        });
}
于 2020-03-10T14:06:53.380 回答