Nesse post eu explicarei como criar um splash screen para a sua aplicação utilizando uma Activity como splash que chamará a Activity principal do programa. Nesse exemplo, como Activity principal, vamos utilizar uma com um TextView escrito HelloWorld. O layout da Activity principal (layout/activity_main.xml) possui o seguinte conteudo:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 | android:layout_width = "match_parent" android:layout_height = "match_parent" > < TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_centerHorizontal = "true" android:layout_centerVertical = "true" android:text = "@string/hello_world" tools:context = ".MainActivity" /> </ RelativeLayout > |
E da classe MainActivity.java:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 | package br.com.thiagovespa.android.sample.samplesplashscreen; import android.app.Activity; import android.os.Bundle; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); } } |
O primeiro passo é criar em uma aplicação existente uma Activity com o nome SplashScreenActivity. Adicione uma imagem no layout dela. Você deverá ter um resultado semelhante à esse no arquivo de layout (activity_splash_scree.xml):
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | android:layout_width = "match_parent" android:layout_height = "match_parent" > < ImageView android:id = "@+id/imageView1" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_alignParentBottom = "true" android:layout_alignParentLeft = "true" android:layout_alignParentRight = "true" android:layout_alignParentTop = "true" android:contentDescription = "@string/splash" android:src = "@drawable/ic_launcher" /> </ RelativeLayout > |
Na classe java do Activity criado (SplashScreenActivity.java) vamos adicionar um TimerTask para exibir o splash por alguns segundos e depois chamar a tela do MainActivity.java. O resultado será o seguinte:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package br.com.thiagovespa.android.sample.samplesplashscreen; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.Intent; import android.os.Bundle; public class SplashScreenActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_splash_screen); new Timer().schedule( new TimerTask() { @Override public void run() { finish(); Intent intent = new Intent(); intent.setClass(SplashScreenActivity. this , MainActivity. class ); startActivity(intent); } }, 6000 ); } } |
O TimerTask na linha 17 será executado após 6 segundos (linha 27). Após isso finalizamos a Activity para que o botão de voltar não funcione (linha 21). Da linha 23 à 25 chamamos a MainActivity. Poderíamos ter a mesma solução utilizando Threads. O motivo de não utlizar Threads é porque o foco é diferente. O Timer e o TimerTaks são componentes de mais alto-nível com o propósito de executar ações agendadas recorrentes ou após um determinado tempo (que é o nosso foco). Existe também a possibilidade de utilizar AsyncTask para, por exemplo, executar operações enquanto é feito a exibição do splash screen. Você pode encontar mais informações nesse link.
Edite o arquivo AndroidManifest.xml para que o SplashScreenActivity seja a Activity principal:
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package = "br.com.thiagovespa.android.sample.samplesplashscreen" android:versionCode = "1" android:versionName = "1.0" > < uses-sdk android:minSdkVersion = "8" android:targetSdkVersion = "15" /> < application android:icon = "@drawable/ic_launcher" android:label = "@string/app_name" android:theme = "@style/AppTheme" > < activity android:name = ".MainActivity" android:label = "@string/title_activity_main" > </ activity > < activity android:name = ".SplashScreenActivity" android:label = "@string/title_activity_splash_screen" > < intent-filter > < action android:name = "android.intent.action.MAIN" /> < category android:name = "android.intent.category.LAUNCHER" /> </ intent-filter > </ activity > </ application > </ manifest > |
Agora é só executar. Caso tenha dúvida, você pode fazer o download do projeto.
Olá, gostaria de saber como retirar o menu da tela... deixando apenas as views que eu criei.
Thiago, estou fazendo conforme tutorial, porém quando o tempo passa ele fecha o app com erro. Sabe o que pode ser? Estou usando android 4.3 para os testes.
Qual o erro?
Olá, Thiago! Fiz o código conforme seu exemplo, porém na hora da execução dá os seguintes erros: no resource found that matches the given name (at 'src' with value '@drawable/iconsamanau') P.S: na minha pasta drawable só possui esse arquivo "iconsamanau".
Tem ideia do ue seja? Desde já, obrigada pela atenção e pelo tutorial.
Ele não achou o que você colocou na pasta drawable. Tente dar um refresh no projeto, clean e afins...
Muito obrigado!
Já tinha feito a minha Splash, mas estava procurando essa parte do Timer.
como fazer uma tela de configuração similar ao whatsapp
quando instalamos o app.
Não entendi. Como assim?
Muito bom, era exatamente o que eu estava procurando.
Estou começando e me esclareceu muito bem.
Obrigado!