• 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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    这里面涉及到了一个颜色资源splash_background,所以需要在color.xml中添加该定义

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <!--添加的颜色定义-->
        <color name="splash_background">#FFFFFF</color>
    </resources>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    3.2 主题实现

    Resources/values/style.xml文件中添加主题的具体实现

      <style name="MyTheme.Splash" parent ="Theme.AppCompat.Light.NoActionBar">
        "android:windowBackground">@drawable/splash_screen
        "android:windowNoTitle">true
        "android:windowFullscreen">true
        "android:windowContentOverlay">@null
        "android:windowActionBar">true
      style>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    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)));
            }
        }
    }
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

    3.4 其他说明

    这个活动(SplashActivity)中有个注意项,就是这个活动是主活动(MainLauncher = true)。因此需要将MainActivity中的MainLauncher 去掉。即:

    [Activity(Label = "@string/app_name")]
    public class MainActivity : AppCompatActivity
    {
    }
    
    • 1
    • 2
    • 3
    • 4

    4、代码下载

    代码下载链接及提取码如下:

    链接:下载链接
    提取码:ZLNH

    5、参考

    本篇文章主要参考了Xamarin的官网,具体参考链接

  • 相关阅读:
    C语言对单链表所有操作与一些相关面试题
    SpringBoot漏洞大全
    八大误区,逐个击破(终篇):云难以扩展、定制性差,还会让管理员失去控制权?
    (算法设计与分析)第三章动态规划-第一节1:动态规划基本思想、框架
    Python虚拟环境指南2022版本
    使用pydumpck反编译pyintaller生成的exe文件 python3.10
    java毕业生设计医学生在线学习交流平台计算机源码+系统+mysql+调试部署+lw
    分布式锁-全面详解(学习总结---从入门到深化)
    小程序DevTools-main抓包
    2022-Java 后端工程师面试指南 -(SSM)
  • 原文地址:https://blog.csdn.net/zlbcdn/article/details/127895322