在用户打开应用程序后,如何让我的Xamarin.Forms for iOS和Android应用程序尽快显示启动画面?

Ala*_*an2 9 xamarin xamarin.forms

我正在寻找提示,示例或任何可以指导我如何为Xamarin应用程序Xamarin.Forms应用程序启动启动屏幕的内容.

我假设我需要对iOS和Android项目进行不同的更改,并研究了我已经找到的内容.

然而,许多信息似乎过时或不再有效.

非常感谢有关如何为iOS和Android执行此操作的任何建议和建议.

jam*_*orn 11

Xamarin.Forms是一种解决方案,本身需要一段时间才能加载.由于所有跨平台的东西都必须等待Xamarin,因此没有跨平台良好的启动画面实现.

看起来你必须分别为iOS和Android实现它.这将使启动画面在标准蓝色Xamarin屏幕之前显示得更快.

编辑:艾伦要求一个完整的解决方案,所以这里是:

iOS:更改.iOS项目的Resources部分中的LaunchScreen.storyboard文件(顺便说一下,这是启动画面).我建议在Xcode中打开它,因为Xcode的故事板编辑器坦率地说比Xamarin好.

Android:你将不得不在这里拥有一张图片.从官方Xamarin支持 -

渲染和显示启动画面的最快方法是创建自定义主题并将其应用于展示启动画面的活动.呈现活动时,它会加载主题并将可绘制资源(由主题引用)应用于活动的背景.这种方法避免了创建布局文件的需要.启动屏幕实现为活动,显示品牌drawable,执行任何初始化,并启动任何任务.应用程序启动后,启动屏幕Activity将启动主Activity并将其自身从应用程序堆栈中移除.

这是涉及的具体代码.下面是一个drawable.将它放在Android项目的Resources/Drawable文件夹中.

<?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>
Run Code Online (Sandbox Code Playgroud)

这是一个主题(将其添加到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>
Run Code Online (Sandbox Code Playgroud)

将此代码作为MyTheme.cs添加到您的Android项目中:

[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)));
    }
}
Run Code Online (Sandbox Code Playgroud)

然后,在完成Android的所有操作后,从MainActivity中删除MainLauncher属性,因为您的启动器现在是MyTheme.

这绝非易事,但这是现在唯一的方式.