Mostrar pantalla splash en Android durante unos segundos al iniciar la aplicación
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> |
Muchas gracias hermano! Excelente!
Te agradezco mucho la explicación, me fue de gran ayuda..
Muchas gracias Jon, lo explicas de una manera sencilla y por ende fácil de entender, me sirvió.
Saludos desde México.
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!
A mi me pasa como a Pedro…. alguna idea???
Gracias!…. Un saludo.
¿Qué error se muestra en el LogCat?
Esto ya que en la categoria del Splash tiene que ser LAUNCHER y mientras que el main activity ahora tiene que quedar como DEFAULT
Excelente tu respuesta, en AndroidManifes he agragdo dos actividades… y ha funcionado bien
A mi me abre bien, el mainactivity pero me entra en bucle y vuelve a lanzarlo.
Alguin sabe que puede ser?
muy bueno el código.
Gracias
Buenas, todo correcto pero me salta un error en el Handler()
error: Handler is abstract; cannot be instantanied
Qué debo hacer?
arriba en las importaciones cambia
import java.util.logging.Handler;
por
import android.os.Handler;
yo almenos lo he solucionado así
mychas gracias … funciona perfecto ..
tengo una duda ..
como puedo hacer precarga del webview mientras esta el splash ??
exelente codigo, gracias
Tambien se puede usar un Timer(), usado en java…
creo que es mas facil. 🙂 saludos
Muchas gracias por compartir el código y comentarlo tan bien, me ha sido de gran ayuda 🙂