Xamarin.Forms - это решение, которое само по себе требует времени для загрузки. Поскольку все кроссплатформенные вещи должны ждать Xamarin, не существует кроссплатформенной хорошей реализации заставки.
Похоже, вам придется реализовать это отдельно для iOS и Android. Это позволит заставке появляться намного быстрее и раньше стандартного синего экрана Xamarin.
РЕДАКТИРОВАТЬ: Алан попросил полное решение, поэтому вот оно:
iOS: Внесите изменения в файл LaunchScreen.storyboard в разделе Resources проекта .iOS (кстати, это заставка). Вместо этого я бы предложил открыть его в Xcode, потому что редактор раскадровок Xcode откровенно лучше, чем Xamarin.
Android: Вам понадобится изображение здесь. Из официальной поддержки Xamarin -
Самый быстрый способ отобразить и отобразить заставку - создать собственную тему и применить ее к действию, отображающему заставку. Когда действие отображается, оно загружает тему и применяет нарисованный ресурс (на который ссылается тема) к фону действия. Этот подход избавляет от необходимости создания файла макета.
Заставка реализована в виде Activity, которая отображает фирменный чертеж, выполняет любые инициализации и запускает любые задачи. Как только приложение загружено, экран-заставка Activity запускает основную Activity и удаляет себя из заднего стека приложения.
Вот конкретный код, используемый для этого. Ниже для рисования. Поместите его в папку Resources / Drawable проекта Android.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<color android:color="@color/splash_background"/>
</item>
<item>
<bitmap
android:src="@drawable/splash"
android:tileMode="disabled"
android:gravity="center"/>
</item>
</layer-list>
Это для темы (добавьте ее в values / styles.xml или добавьте values / styles.xml, если документ не существует.).
<resources>
<style name="MyTheme.Base" parent="Theme.AppCompat.Light">
</style>
<style name="MyTheme" parent="MyTheme.Base">
</style>
<style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
</style>
</resources>
Добавьте этот код в свой проект Android как MyTheme.cs:
[Activity(Theme = "@style/MyTheme.Splash", MainLauncher = true, NoHistory = true)]
public class SplashActivity : AppCompatActivity
{
static readonly string TAG = "X:" + typeof(SplashActivity).Name;
public override void OnCreate(Bundle savedInstanceState, PersistableBundle persistentState)
{
base.OnCreate(savedInstanceState, persistentState);
Log.Debug(TAG, "SplashActivity.OnCreate");
}
// Launches the startup task
protected override void OnResume()
{
base.OnResume();
Task startupWork = new Task(() => { SimulateStartup(); });
startupWork.Start();
}
// Simulates background work that happens behind the splash screen
async void SimulateStartup ()
{
Log.Debug(TAG, "Performing some startup work that takes a bit of time.");
await Task.Delay (8000); // Simulate a bit of startup work.
Log.Debug(TAG, "Startup work is finished - starting MainActivity.");
StartActivity(new Intent(Application.Context, typeof (MainActivity)));
}
}
Затем, после того, как вы сделали все это для Android, удалите атрибут MainLauncher из MainActivity, так как ваш лаунчер теперь MyTheme.
Это отнюдь не просто, но это единственный путь, который есть сейчас.