Как поменять картинку (иконку) при запуске приложения (SplashScreen)
У меня есть стили
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape>
<gradient
android:angle="45"
android:startColor="#158ED7"
android:endColor="#66E2FC"
android:type="linear"/>
</shape>
</item>
<item>
<bitmap
android:src="@drawable/ic_logo"
android:gravity="center"/>
</item>
</selector>
Указал путь на нужную картинку
<resources>
<style name="AppTheme.Launcher" parent="@android:style/Theme.NoTitleBar">
<item name="android:windowBackground">@drawable/gradient_background</item>
</style>
</resources>
Я вот так вот сделал и применил эту тему к MainActivity в манифесте. Но при запуске задний фон меняется на градиент, а вот картинка не меняется, показывается иконка приложения
Ответы (1 шт):
В Андроид selector работает таким образом, что выбирается первый item, который подходит по условию. В ваших item нет условий, поэтому всегда будет выбираться первый item, а второй item будет игнорироваться.
Чтобы исправить эту ошибку, вам необходимо использовать layer-list, а не selector. Это позволит наложить один item поверх другого:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<gradient ... />
</shape>
</item>
<item>
<bitmap ... />
</item>
</layer-list>
Кроме этого, чтобы реализовать Splash Screen для Android 12 и выше, нужно использовать атрибут windowSplashScreenBackground.