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:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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:
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):
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" 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:
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:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 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!