Tiago Aguiar

Splash Screen Android - O Jeito Mais Simple e Eficaz

avatar
Preview Image

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.

  1. O tema que herdamos não possui a action bar/toolbar.
  2. alteramos a cor da status bar para branco.
  3. 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.