Xamarin实现App展示启动界面

在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的官网,具体参考链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值