Este ejemplo es para Xamarin.Android pero se puede usar completamente en Xamarin.Forms, la razón por la que esta en esta categoría es que las plataformas iOS y WindowsPhone pueden establecer la pantalla de carga(Splashscreen) en las propiedades del proyecto. Ahora bien, para poder tener este mismo funcionamiento en Android debemos seguir los siguientes pasos:
En el proyecto hay que añadir un Activity y le asignarle el nombre SplashScreen.cs . El código a introducir es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Android.App; using Android.Content; using Android.Content.PM; using Android.OS; using Android.Runtime; using Android.Views; using Android.Widget; namespace AppName.Droid { [Activity(Theme = "@style/Theme.Splash", //Indicates the theme to use for this activity MainLauncher = true, //Set it as boot activity ScreenOrientation = ScreenOrientation.Portrait, NoHistory = true)] //Doesn't place it in back stack public class SplashScreenActivity : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); System.Threading.Thread.Sleep(1500); //Let's wait a while... this.StartActivity(typeof(MainActivity)); } } } |
En la linea donde dice System.Threading.Thread.Sleep(1500); es donde se establece el tiempo de visualización de la pantalla de carga en milisegundos, en este caso, la pantalla permanecerá visible un segundo y medio.
En la carpeta resources/drawable hay que incluir en el proyecto la imagen splash.png. Ojo la propiedad BuildAction del fichero debe tener asignado AndroidResource para poder acceder a ella desde la aplicación.
A continuación en la carpeta resources/values hay que añadir el fichero XML styles.xml el cual contiene la información de como mostrar la página de carga.
1 2 3 4 5 6 7 |
<?xml version="1.0" encoding="utf-8" ?> <resources> <style name="Theme.Splash" parent="android:Theme"> <item name="android:windowBackground">@drawable/splash</item> <item name="android:windowNoTitle">true</item> </style> </resources> |
Este ejemplo únicamente establece la imagen de fondo llamada splash y asigna el valor verdadero a la propiedad windowNoTile para que la imagen no se repita en caso de ser más pequeña que la resolución del dispositivo.