PostSplashScreenTheme не применяет тему после заставки ⇐ Android
-
Гость
PostSplashScreenTheme не применяет тему после заставки
После реализации API-интерфейса заставки, как указано в документации Android (а также здесь и здесь), действие запуска (которое происходит сразу после экрана-заставки) не имеет динамической цветовой темы, как остальная часть приложения. Экран-заставка имеет атрибут @style/Theme.App, который должен применять тему базового приложения. к активности запуска после очистки экрана-заставки, но это не так. Все остальное было реализовано так, как того требует документация (класс активности, файл манифеста, класс активности и файлы themes.xml).
Я испробовал все возможные комбинации, и единственная, которая «работает», — это когда не установка начальной темы действия (или всего действия) в качестве заставки в манифесте (т. е. < code>android:theme="@style/Theme.App.Starting"). Но тогда почему документация настаивает на этом? Что я могу сделать, чтобы все работало так, как задумано?
Изменить: соответствующий код по запросу
Тема-заставка:
?android:attr/colorBackground @mipmap/ic_launcher_round 200 @style/Theme.App ?android:attr/colorBackground ?android:attr/colorBackground true манифест (только соответствующие атрибуты):
Основная активность:
переопределить fun onCreate(savedInstanceState: Bundle?) { настройкаSplashScreen() super.onCreate(savedInstanceState) /*...*/ } Класс приложения:
class App: Application() { переопределить удовольствие onCreate() { супер.onCreate() // Применяем динамический цвет DynamicColors.applyToActivitiesIfAvailable(это) } } Изменение от 5 июля 2023 г.: (возможно) последнее обновление
После огромного количества испытаний и исследований я пришел к выводу, что это ошибка, и ее нельзя исправить или не удастся исправить в ближайшее время. Я также определил причину этого.
Об ошибке было сообщено более полутора лет назад, и причина ее возникновения заключается в том, что после того, как библиотека вызывает postSplashScreenTheme, она снова устанавливает базовую тему приложения, что избавляет от Материал You (динамический) цвета. В другом проекте возникла та же проблема, из-за которой им не удалось реализовать для себя Material You. Кто-то предложил установить DynamicColors.applyToActivitiesIfAvailable(this) в каждом действии после installSplashScreen(), но строка состояния сохраняла базовый цвет темы вместо динамического цвета, поэтому это было бесполезно . В своих экспериментах я нашел другой обходной путь: не установка какой-либо темы-заставки в манифесте (android:theme="@style/Theme.App.Starting"), похоже, работает API уровня 31+, но вообще не показывает значок заставки на предыдущих уровнях, поэтому он также бесполезен.
Начиная с этого обновления API-интерфейс Splash Screen и Material You (динамический цвет) конфликтуют друг с другом и, следовательно, являются взаимоисключающими. Я не буду использовать динамические цвета, так как мне нужна функция загрузки данных при запуске приложения из API-интерфейса заставки.
После реализации API-интерфейса заставки, как указано в документации Android (а также здесь и здесь), действие запуска (которое происходит сразу после экрана-заставки) не имеет динамической цветовой темы, как остальная часть приложения. Экран-заставка имеет атрибут @style/Theme.App, который должен применять тему базового приложения. к активности запуска после очистки экрана-заставки, но это не так. Все остальное было реализовано так, как того требует документация (класс активности, файл манифеста, класс активности и файлы themes.xml).
Я испробовал все возможные комбинации, и единственная, которая «работает», — это когда не установка начальной темы действия (или всего действия) в качестве заставки в манифесте (т. е. < code>android:theme="@style/Theme.App.Starting"). Но тогда почему документация настаивает на этом? Что я могу сделать, чтобы все работало так, как задумано?
Изменить: соответствующий код по запросу
Тема-заставка:
?android:attr/colorBackground @mipmap/ic_launcher_round 200 @style/Theme.App ?android:attr/colorBackground ?android:attr/colorBackground true манифест (только соответствующие атрибуты):
Основная активность:
переопределить fun onCreate(savedInstanceState: Bundle?) { настройкаSplashScreen() super.onCreate(savedInstanceState) /*...*/ } Класс приложения:
class App: Application() { переопределить удовольствие onCreate() { супер.onCreate() // Применяем динамический цвет DynamicColors.applyToActivitiesIfAvailable(это) } } Изменение от 5 июля 2023 г.: (возможно) последнее обновление
После огромного количества испытаний и исследований я пришел к выводу, что это ошибка, и ее нельзя исправить или не удастся исправить в ближайшее время. Я также определил причину этого.
Об ошибке было сообщено более полутора лет назад, и причина ее возникновения заключается в том, что после того, как библиотека вызывает postSplashScreenTheme, она снова устанавливает базовую тему приложения, что избавляет от Материал You (динамический) цвета. В другом проекте возникла та же проблема, из-за которой им не удалось реализовать для себя Material You. Кто-то предложил установить DynamicColors.applyToActivitiesIfAvailable(this) в каждом действии после installSplashScreen(), но строка состояния сохраняла базовый цвет темы вместо динамического цвета, поэтому это было бесполезно . В своих экспериментах я нашел другой обходной путь: не установка какой-либо темы-заставки в манифесте (android:theme="@style/Theme.App.Starting"), похоже, работает API уровня 31+, но вообще не показывает значок заставки на предыдущих уровнях, поэтому он также бесполезен.
Начиная с этого обновления API-интерфейс Splash Screen и Material You (динамический цвет) конфликтуют друг с другом и, следовательно, являются взаимоисключающими. Я не буду использовать динамические цвета, так как мне нужна функция загрузки данных при запуске приложения из API-интерфейса заставки.
Мобильная версия