Фон
Я знаю, что в Android Q есть новая функция, наконец, поддерживающая темную тему (написал здесь о обнаружение его).
Я также знаю, что есть функция «Ночной свет» (здесь strong>), из-за чего экран становится более желтым.
Поддержка выбора темы вручную — это то, что я делал годами (используя просто setTheme в первой строке кода Activity onCreate), но я хочу знать, есть ли что-то автоматическое, что позволит мне установить его еще до того, как приложение действительно запустится, на экране-заставке.
Эта проблема
Кажется, очень старая функция (начиная с API 8!) существует на Android очень давно, имея в ресурсах квалификатор «ночь», и я даже не пробовал ее.
К сожалению, потому что о «темной теме» и ночных вещах теперь чаще говорят как о новых функциях ( здесь, например), я не могу найти, о чем старый.
Однако, глядя на некоторые статьи и документацию, кажется, что это почти полностью вручную:
https://developer.android.com/reference/android/app/UiModeManager.html - говорит, что я могу установить его сам, в том числе сделать его автоматическим. Однако, похоже, это связано с стыковкой и, возможно, даже с автомобильным режимом.
https://google-developer-training.github.io/android-developer-fundamentals-course-concepts/en/Unit%202/53_c_providing_resources_for_adaptive_layouts.html — говорит, что я могу установить «ночь» в качестве квалификатора, и есть «ночь Режим".
Что я пробовал
Я попытался установить различные темы соответственно:
res/drawable/splash.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:opacity="opaque" tools:ignore="UnusedAttribute">
<item android:gravity="fill">
<shape android:shape="rectangle">
<solid android:color="#fff"/>
</shape>
</item>
...
</layer-list>
res/drawable-v29/splash.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:opacity="opaque" tools:ignore="UnusedAttribute">
<item android:gravity="fill">
<shape android:shape="rectangle">
<solid android:color="?attr/colorSurface"/>
</shape>
</item>
...
</layer-list>
res/drawable-night/splash.xml
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:opacity="opaque" tools:ignore="UnusedAttribute">
<item android:gravity="fill">
<shape android:shape="rectangle">
<solid android:color="#000"/>
</shape>
</item>
...
</layer-list>
манифест
res/values/themes.xml
<style name="AppTheme_splash" parent="@style/Theme.MaterialComponents.DayNight">
<item name="android:windowBackground">@drawable/splash</item>
</style>
res/values-v26/themes.xml
<style name="AppTheme_splash" parent="@style/Theme.MaterialComponents.DayNight">
<item name="android:windowSplashscreenContent">@drawable/splash</item>
</style>
Я попытался удалить android:windowBackground
и android:windowSplashscreenContent
, пытаясь проверить, автоматически ли это, но это не помогло.
Вопросы
В основном я просто хочу знать о ночном режиме и могу ли я использовать его для заставки:
Когда включится «ночной режим», который Android так долго поддерживает?
Это os-global режим? Пользователь контролирует?
Это автоматически? Или полностью вручную текущим приложением?
Остается ли режим позже, даже если я установил его вручную с помощью приложения, и приложение было убито?
Можно ли установить тему приложения (имеется в виду заставка), чтобы использовать это, чтобы при включенном ночном режиме оно использовало его для темного фона?
Подходит ли мой код для этого?