quinta-feira, 21 de julho de 2016

Splash Screen no Android


Fala galera!

Este post será uma dica rápida e simples para aqueles que, assim como eu, estão iniciando no mundo do desenvolvimento Android. 




Vocês já perceberam que a maioria dos aplicativos - se não todos - possuem uma tela de apresentação ou também conhecida como splash screen. O splash screen é um recurso muito utilizado em desenvolvimento, não só de aplicativos, mas também em jogos e softwares diversos. 

Essa funcionalidade é extremamente útil, pois permite que, antes de iniciar o aplicativo, seja possível realizar validações de diversos recursos para o perfeito funcionamento da aplicação. Tais recursos podem ser conectividade com banco de dados, internet, GPS, etc.

Em outro post, falamos um pouco sobre o teste de conexão de internet que seu aplicativo possa verificar antes de continuar a execução normalmente. Você poderia adicionar essa tela splash screen durante a verificação, por exemplo.

Vamos lá então!

Para iniciarmos, precisamos modificar nosso AndroidManifest. Vamos deixá-lo dessa forma:

<manifest 
android:versioncode="1" 
android:versionname="1.0" 
package="com.deviscoming.splashscreen" 
xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools">

    <uses-sdk 
          android:minsdkversion="9" 
          android:targetsdkversion="18"/>

    <application 
          android:allowbackup="true" 
          android:icon="@drawable/logo_app" 
          android:label="@string/app_name" 
          android:supportsrtl="true" 
          android:theme="@style/AppTheme">

        <!-- Splash Screen -->
        <activity 
            android:icon="@drawable/logo_app" 
            android:label="@string/app_name" 
            android:name=".SplashScreenActivity" 
            android:nohistory="false" 
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN">
                    <category android:name="android.intent.category.LAUNCHER">
                    </category>
                </action>
            </intent-filter>
        </activity>      
        <!-- fim Splash Screen -->

        <!-- activity principal -->
        <activity 
               android:icon="@drawable/logo_app" 
               android:label="@string/app_name" 
               android:name=".MainActivity" 
               android:theme="@style/AppTheme.NoActionBar">        
       </activity>
       <!-- fim activity principal -->
    </application>

</manifest>

Assim, definimos que a primeira activity a ser executada será a nossa SplashScreenActivity. Esta classe será executada ao iniciar o aplicativo. Nela iremos codificar, conforme o código abaixo.

package com.deviscoming.splashscreen;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;

/**
 * Created by Renan Rodrigues Ramos on 15/07/2016.
 */
public class SplashScreenActivity extends Activity {

    private final int TIME_SPLASH_DISPLAY = 4000;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash_screen);

        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                   Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
                   startActivity(i);
                   finish();
            }
        }, TIME_SPLASH_DISPLAY);
    }

}

Nesta classe, como podemos ver, temos um objeto Handler() e utilizaremos o método postDelayed() que será responsável por fazer o delay na inicialização de nossa aplicação.

O método postDelayed() possui dois argumentos:
  • a thread que será responsável pela execução em segundo plano. Em nosso caso teremos o método run() da interface Runnable que é a responsável por iniciar a activity para o usuário;
  • uma constante que definimos com 4000 milissegundos, ou seja, 4 segundos.


Veja que dentro do método run() temos um objeto Intent que inicia a classe MainActivity após o término do delay.

   Intent i = new Intent(SplashScreenActivity.this, MainActivity.class);
   startActivity(i);

Aqui está o layout da tela splash screen. A nomeamos como activity_splash_screen:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/branco">

  <ImageView
      android:layout_width="fill_parent"
      android:layout_height="fill_parent"
      android:src="@drawable/splash_screen_imagem"
      android:paddingBottom="@dimen/padding_img_splascreen_bottom"
      android:paddingLeft="@dimen/padding_img_splascreen_left"
      android:paddingRight="@dimen/padding_img_splascreen_right"
      android:paddingTop="@dimen/padding_img_splascreen_top"/>

</LinearLayout>

Depois de fazer essas configurações, você precisará desenvolver a classe MainActivity e seu layout. Com isso sua tela de apresentação já está funcionando.

Deixe seus comentários e dicas!

Até mais!

;)
Renan Rodrigues Ramos Desenvolvedor

Sou desenvolvedor, amo desenvolvimento de software, músico e apaixonado por filmes e seriados.