在App在启动时,首先会展示启动界面。与此同时,程序可以进行一些资源的加载等工作。本次主要说明Xamarin是如何实现App在启动时展示启动界面
1、效果展示
2、原理
原理非常简单,就是创建一个新的主题
,将启动界面的图片作为主题
的一个资源。这样,app启动时,会加载主题,这样App就可以展示logo图片了。
3、demo实现
IDE:VS2022社区版
开发方式:Xamarin.Andorid
3.1 定义主题
在Resources/drawable
文件夹中创建主题所用到的资源文件(xml文件格式)
<?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_logo" //说明启动界面所使用的图片
android:tileMode="disabled"
android:gravity="center"/>
</item>
</layer-list>
这里面涉及到了一个颜色资源splash_background
,所以需要在color.xml
中添加该定义
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--添加的颜色定义-->
<color name="splash_background">#FFFFFF</color>
</resources>
3.2 主题实现
在Resources/values/style.xml
文件中添加主题的具体实现
<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>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowActionBar">true</item>
</style>
3.3 活动的实现
活动是将主题进行具体的呈现
using Android.App;
using Android.Content;
using Android.OS;
using Android.Util;
using AndroidX.AppCompat.App;
using System.Threading.Tasks;
namespace InitPage
{
[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");
}
//激活界面时,同时开始调用一个回调方法,进行logo的展示
protected override void OnResume()
{
base.OnResume();
Task startupWork = new Task(() => { SimulateStartup(); });
startupWork.Start();
}
//防止误操作返回按钮,取消了启动界面
public override void OnBackPressed() { }
//模拟启动界面后的操作(资源加载之类)
async void SimulateStartup()
{
Log.Debug(TAG, "Performing some startup work that takes a bit of time.");
await Task.Delay(8000); // 模拟干一些工作
Log.Debug(TAG, "Startup work is finished - starting MainActivity.");
//启动app的主界面
StartActivity(new Intent(Application.Context, typeof(MainActivity)));
}
}
}
3.4 其他说明
这个活动(SplashActivity
)中有个注意项,就是这个活动是主活动(MainLauncher = true
)。因此需要将MainActivity
中的MainLauncher
去掉。即:
[Activity(Label = "@string/app_name")]
public class MainActivity : AppCompatActivity
{
}
4、代码下载
代码下载链接及提取码如下:
链接:下载链接
提取码:ZLNH
5、参考
本篇文章主要参考了Xamarin的官网,具体参考链接