我正在制作一个 Android 应用程序。我为黑暗模式制作了另一个 UI。所以这就是我需要的;该应用程序将在当地时间自动切换到深色主题。例如,当太阳下山时,应用程序将切换到暗模式。
或者另一种选择是通过一天中的预设时间切换到暗模式。希望你能理解我的问题。如果有人知道,请帮助我,如果可能的话,我更喜欢第一个选项。提前致谢。
我正在制作一个 Android 应用程序。我为黑暗模式制作了另一个 UI。所以这就是我需要的;该应用程序将在当地时间自动切换到深色主题。例如,当太阳下山时,应用程序将切换到暗模式。
或者另一种选择是通过一天中的预设时间切换到暗模式。希望你能理解我的问题。如果有人知道,请帮助我,如果可能的话,我更喜欢第一个选项。提前致谢。
也许你可以看看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);
}
}
更多信息在这里
快捷方式:
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();
}
});
}