Как поменять картинку (иконку) при запуске приложения (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 шт):

Автор решения: Vadik

В Андроид 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.

→ Ссылка