Темы Android Force Dark и Android DayNight - это две разные функции.
Force Dark предназначен для автоматического превращения световых приложений в приложения темного режима системой. Это предназначено как быстрое решение для световых приложений для поддержки темного режима. Если ваше приложение не предназначено только для освещения и уже поддерживает режим DayNight / Dark, вы не должны (и в принципе не можете) использовать эту функцию.
Темы Android DayNight - это гибридные темы, которые автоматически переключаются между светлой и темной версиями в зависимости от системной темы или настроек дневного / ночного режима. Это рекомендуемый способ реализовать темный режим.
По какой-то необъяснимой причине разработчики WebKit / WebView решили связать настройку FORCE_DARK_AUTO
веб-просмотра с функцией Android Force Dark, но не с рекомендуемой функцией DayNight.
Как вы заявили, ваше приложение использует тему DayNight. Поэтому в вашем приложении отключена функция Android 10 Force Dark, а параметр FORCE_DARK_AUTO
в вашем веб-просмотре не работает.
Итак, чтобы включить автоматическое переключение темного режима для вашего веб-просмотра, вам необходимо проверить, в каком режиме работает ваша тема DayNight, а затем включить или отключить темный режим в веб-просмотре соответственно:
if(WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
int nightModeFlags = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
if (nightModeFlags == Configuration.UI_MODE_NIGHT_YES) {
//Theme is switched to Night/Dark mode, turn on webview darkening
WebSettingsCompat.setForceDark(myWebView.getSettings(), WebSettingsCompat.FORCE_DARK_ON);
}
else{
//Theme is not switched to Night/Dark mode, turn off webview darkening
WebSettingsCompat.setForceDark(myWebView.getSettings(), WebSettingsCompat.FORCE_DARK_OFF);
}
}
Хотя это не рекомендуется, но если вы все же хотите отказаться от поддержки темы DayNight и вместо этого включить быстрое исправление Force Dark, вы можете прочитать некоторую общую информацию о функции Force Dark в Android 10 ниже.
Функция Android 10 Force Dark
Force Dark для Android - это функция, представленная в Android 10 (API 29). Он позволяет любому приложению или действию, использующему только светлую тему и, следовательно, не поддерживающему темный режим сам по себе, автоматически затемняться системой, когда устройство работает в темном режиме.
Поскольку вы не можете контролировать, как эта функция применяет темный режим к вашим действиям и компонентам, ее рекомендуется использовать только в том случае, если вам нужно быстрое исправление для реализации темного режима. Если вы хотите правильно реализовать темный режим в своем приложении, вам необходимо использовать темную тему или тему DayNight с автоматическим переключением.
Чтобы включить принудительную темноту для вашего приложения, необходимо:
- Использовать или наследовать световую тему (
<item name="isLightTheme">true</item>
необходимо указать для темы или ее предка)
<item name="android:forceDarkAllowed">true</item>
необходимо установить для вашей темы или ее предка.
- Вам нужно, чтобы ваш
compileSdkVersion
(и, возможно, targetSdkVersion
) в вашем build.gradle был установлен как минимум на 29
Большинство системных тем и тем AndroidX, предназначенных только для освещения (например, android:Theme.Material.Light
или Theme.MaterialComponents.Light
), должны иметь свойство светлой темы, установленное по умолчанию, поэтому создание темы, унаследованной от них, как это, должно включать принудительное затемнение:
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
<!-- Other properties here-->
<item name="android:forceDarkAllowed">true</item>
</style>
А затем примените эту тему к своему приложению (или отдельному действию) в манифесте Android.
<application
...
android:theme="@style/AppTheme">
</application>
Это включит принудительное затемнение для всего приложения или действия, для которых вы установили тему. Теперь во всех представлениях по умолчанию включена функция принудительного затемнения. Вы можете отключить отдельные виды от принудительного затемнения, установив для них android:forceDarkAllowed="false"
.
person
Leon Lucardie
schedule
31.07.2020
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
, это не работает, если я используюAppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
и устанавливаю систему на темный цвет, то это тоже не работает. Должен быть какой-то другой способ сказать ему, что система находится в темном режиме. Я пробую это на Android 10, не уверен, что это имеет значение. - person casolorz   schedule 21.07.2020