En ésta ocasión veremos cómo implementar un Splash Screen en Android. Un Splash Screen (o pantalla de Bienvenida) consiste en una pantalla que muestra algunos elementos gráficos, como puede ser el logotipo de la aplicación y cualquier otra información que el desarrollador considere pertinente. Por lo general aparece mientras la aplicación realiza la carga de datos o conexión a bases de datos remotas. Sin embargo, muchas empresas lo utilizan con propósitos de marca (Darwin, 2017).
Ir a drawable->New->Drawable resource file. En el cuadro de diálogo que se abre, le asignamos un nombre al archivo, en mi caso “splash”. Aquí diseñaremos nuestro Splash Screen, que contendrá en mi caso el logotipo de la aplicación.
El código de éste archivo sería como el siguiente:
<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@color/colorPrimary"/> <item> <bitmap android:gravity="center" android:src="@drawable/slimbody"/> </item> </layer-list>
En el código anterior, se utiliza un color de fondo, y en forma centrada, se mostrará una imagen, que en mi caso se llama “slimbody” y está en la carpeta “drawable”. En tu caso, puedes usar la imagen de tu elección.
Vamos a agregar un nuevo estilo. Abrimos res->values->styles.xml
Abrimos res->values->themes->themes.xml
Crearemos un nuevo estilo para la pantalla splash screen, para lo cual agregaremos las siguientes lineas:
<style name="SplashScreen" parent="Theme.AppCompat.NoActionBar"> <item name="android:windowBackground"> @drawable/splash </item> </style>
Generamos un nuevo Activity sin layout: Da clic derecho en el package donde desees crear el Activity, luego en New->Activity->Empty Activity, y asigna un nombre al activity, en mi caso se llama SplashActivity. Desactiva la casilla Generate Layout File.
Éste archivo contendrá código para llamar al MainActivity.
public class SplashActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = new Intent(this, MainActivity.class); startActivity(intent); finish(); // evitar regresar a éste activity } }
A continuación, vamos al AndroidManifest.xml para indicarle que el primer Activity que debe cargar el el SplashScreen.
Abre AndroidManifest.xml. Verás que uno de los <activity> tiene las siguientes líneas:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
Se las quitamos y se las ponemos al <activity> con name=”.Activities.SplashActivity”
Vamos a agregar el estilo que creamos. Agrega tambien la siguiente línea a ese mismo <activity>
android:theme="@style/SplashScreen">
En mi caso quedó así:
<activity android:name=".Activities.SplashActivity" android:theme="@style/SplashScreen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Si en éste momento corremos la aplicación, veremos que el Splash Screen es el primero que se ejecuta.
Y enseguida abre el MainActivity.
Si nuestra aplicación al iniciar tuviera que realizar un acceso a base de datos o peticiones a internet, el Splash Screen se mostraría durante la cantidad de tiempo que la app estuviese cargando. Éstas operaciones estarían en una clase que sobreescribe a Application. Si deseáramos que el Splash Screen esté una cantidad t de tiempo, podríamos también indicárselo en esa clase que sobreescribe a Application.
Da clic derecho en el package donde desees crear la clase, luego en New->Java Class. Asígnale un nombre a la clase, por ejemplo, MyApp.
En el caso de que deseáramos hacer un retardo de unos 4 segundos, el código de ésta clase se vería así:
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); SystemClock.sleep(4000); } }
En el AndroidManifest debemos indicarle que use esa clase que acabamos de crear.
Bajo la línea <application escribe:
android:name=".Activities.MyApp"
Es decir, parte del AndroidManifest se vería así:
<application android:name=".Activities.MyApp" android:allowBackup="true" android:icon="@mipmap/ic_launcher"
¡Listo! Espero que hayas conseguido Implementar un Splash Screen en Android. En caso de que te resulte más fácil aprender en video, puedes consultar el siguiente.