Mostrar pantalla splash en Android durante unos segundos al iniciar la aplicación

noviembre 20, 2012

Cuando iniciamos una aplicación en nuestro dispositivo Android, es habitual que se muestre durante unos pocos segundos una pantalla inicial (también llamada «splash«) donde se muestra el logotipo de la aplicación, de la empresa, etc. También es habitual utilizar esta pantalla para la precarga de datos y así tenerlos disponibles una vez la aplicación haya iniciado.

En este post vamos a ver como mostrar una pantalla splash durante unos segundos al iniciar nuestra aplicación.

Para ello, creamos una nueva clase llamada «SplashActivity» con el siguiente contenido:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class SplashActivity extends Activity {
 
    // Duración en milisegundos que se mostrará el splash
    private final int DURACION_SPLASH = 3000; // 3 segundos
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
 
        // Tenemos una plantilla llamada splash.xml donde mostraremos la información que queramos (logotipo, etc.)
        setContentView(R.layout.splash);
 
        new Handler().postDelayed(new Runnable(){
            public void run(){
		// Cuando pasen los 3 segundos, pasamos a la actividad principal de la aplicación
        	Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        	startActivity(intent);
        	finish();
            };
        }, DURACION_SPLASH);
    }
}

Por supuesto debemos tener una aplicación principal llamada (en este caso) MainActivity que es la que se abrirá automáticamente cuando la pantalla splash desaparezca cuando pasen los 3 segundos que hemos configurado.

No podemos olvidar incluir esta nueva actividad en el archivo AndroidManifest.xml como actividad principal (para que nada más iniciar la aplicación, sea la actividad SplashActivity la que se abra). Es habitual mostrar la pantalla de splash a pantalla completa, para ello le daremos el estilo correspondiente:

1
2
3
4
5
6
7
8
9
<activity 
    android:name=".SplashActivity" 
    android:label="@string/app_name"
    android:theme="@style/Theme.Light.NoTitleBar.Fullscreen">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

Tags ; , , , , , , , ,

16 comentarios

    Adan Ene 10, 2013

    Muchas gracias hermano! Excelente!

    Responder
    Zimm| May 05, 2013

    Te agradezco mucho la explicación, me fue de gran ayuda..

    Responder
    Fredy May 30, 2013

    Muchas gracias Jon, lo explicas de una manera sencilla y por ende fácil de entender, me sirvió.

    Saludos desde México.

    Responder
    Pedro Oct 29, 2013

    Porque ami esto no me funciona? lo hago tal cual, modifico el archivo manifiesto, y sale la ventana cargando, duran 3 segundos pero cuando va a la activity «MainActivity» que tengo creada, me salta un error en el emulador. En cambio si cambio del manifiesto y pongo MainActivity como principal, funciona bien.

    Alguna idea porfavor? Gracias!

    Responder
    Juan Carlos Nov 23, 2013

    A mi me pasa como a Pedro…. alguna idea???
    Gracias!…. Un saludo.

    Responder
    Jon Nov 23, 2013

    ¿Qué error se muestra en el LogCat?

    Responder
    Jomab Ene 23, 2014

    Esto ya que en la categoria del Splash tiene que ser LAUNCHER y mientras que el main activity ahora tiene que quedar como DEFAULT

    Responder
      carlos_c_944@hotmail.com Ene 03, 2020

      Excelente tu respuesta, en AndroidManifes he agragdo dos actividades… y ha funcionado bien

      Responder
    David Sep 17, 2014

    A mi me abre bien, el mainactivity pero me entra en bucle y vuelve a lanzarlo.

    Alguin sabe que puede ser?

    Responder
    Marcos Feb 09, 2015

    Buenas, todo correcto pero me salta un error en el Handler()
    error: Handler is abstract; cannot be instantanied

    Qué debo hacer?

    Responder
      Toni Mar 29, 2015

      arriba en las importaciones cambia

      import java.util.logging.Handler;

      por

      import android.os.Handler;

      yo almenos lo he solucionado así

      Responder
    Guillermo Ago 26, 2015

    mychas gracias … funciona perfecto ..
    tengo una duda ..
    como puedo hacer precarga del webview mientras esta el splash ??

    Responder
    Ruben Oct 18, 2015

    exelente codigo, gracias

    Responder
    Rose May 13, 2016

    Tambien se puede usar un Timer(), usado en java…
    creo que es mas facil. 🙂 saludos

    Responder
    Maria Dic 27, 2019

    Muchas gracias por compartir el código y comentarlo tan bien, me ha sido de gran ayuda 🙂

    Responder

Escribe un comentario

Los comentarios son moderados y se utiliza rel="nofollow" para los enlaces.