Splash Screen Android - O Jeito Mais Simple e Eficaz
Antes de mais nada, você precisará das imagens da splash screen nos tamanhos:
1
2
3
4
5
6
res/
drawable-xxxhdpi/
drawable-xxhdpi/
drawable-xhdpi/
drawable-hdpi/
drawable-mdpi/
Agora, copie essas imagens para a(s) pasta(s) drawable do seu projeto.
Próximo passo é ter disponível um arquivo desenhável (drawable xml) que armazenará o fundo e o bitmap associado. Dito isto, crie um arquivo drawable para hospedar o logo chamado splash_bg.xml
na pasta drawable.
Note que é a pasta principal drawable, não as demais com tamanhos específicos.
Este arquivo deve conter a tag xml raiz chamada de layer-list
.
Essa tag permite que os componentes sejam adicionados em listas de camadas. Por isso o nome XD.
1
2
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
</layer-list>
O primeiro item da camada será uma cor de fundo - background.
1
2
3
4
5
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" />
</layer-list>
O segundo item da camada será o bitmap do nosso logo
1
2
3
4
5
6
7
8
9
10
11
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/white" />
<item>
<bitmap
android:gravity="center"
android:src="@drawable/logo" />
<!-- logo é o nome do arquivo -->
</item>
</layer-list>
Primeira etapa concluída!
Criando um tema específico para Splash Screen
Agora precisamos avisar ao sistema android que esse drawable é um drawable do tema.
Abrindo o arquivo de temas (geralmente é themes.xml), crie um novo tema.
1
2
3
4
<style name="Theme.Splash" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="android:statusBarColor">@color/white</item>
<item name="android:windowBackground">@drawable/splash_bg</item>
</style>
Vamos analisar esse trecho de código.
- O tema que herdamos não possui a action bar/toolbar.
- alteramos a cor da status bar para branco.
- informamos na propriedade
windowBackground
que o fundo da tela deve ser um arquivo drawable.
Agora, acessando o AndroidManifest.xml, devemos alterar o tema da aplicação para o novo tema.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="co.tiagoaguiar.codelab.splash">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Splash">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Definindo Activity com Splash Screen
Ao rodar o app no smartphone ou emulador, você notará que a Splash aparece mas ela não desaparece. Precisamos de uma lógica para isso.
Antes de setar o conteúdo com o setContentView()
, devemos retornar para o tema principal que estava antes da splash ser criada.
1
2
3
4
5
6
7
8
9
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setTheme(R.style.Theme_Main)
setContentView(R.layout.activity_main)
}
}
Agora, caso queira que a splash demore um pouco mais, você pode atrasar usando o Thread.sleep(1000)
. Isso faz com que a thread atual demore um pouco.
Como esta é a primeira Activity, não tem problema manter um timeout no início do projeto.
Assista ao video
Maravilha! Em breve você receberá conteúdos exclusivos por e-mail. Continue lendo os artigos para aprender mais sobre programação.