Xamarin.Android之Splash的几种简单实现

对现在的APP软件来说,基本上都会有一个Splash页面,类似大家常说的欢迎页面、启动界面之类的。

正常来说这个页面都会有一些相关的信息,比如一些理念,Logo,版本信息等

下面就来看看在Xamarin.Android是如何简单实现的吧。

一、新建一个空白Android项目

二、添加一个layout,splash.axml

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:orientation="vertical"
 4     android:layout_width="match_parent"
 5     android:layout_height="match_parent">
 6     <TextView
 7         android:layout_width="match_parent"
 8         android:layout_height="wrap_content"
 9         android:text="Splash页面"
10         android:textSize="50sp"
11         android:layout_marginTop="150dp"
12         android:gravity="center" />
13     <LinearLayout
14         android:orientation="vertical"
15         android:layout_width="match_parent"
16         android:layout_height="match_parent"
17         android:gravity="bottom">
18         <TextView
19             android:layout_width="match_parent"
20             android:layout_height="wrap_content"
21             android:textSize="20sp"
22             android:id="@+id/tv_version"
23             android:gravity="center" />
24     </LinearLayout>
25 </LinearLayout>  

内容比较简单,几个文字和app的版本信息。

三、添加一个Activity ,SplashActivity

 1 using Android.App;
 2 using Android.Content;
 3 using Android.Content.PM;
 4 using Android.OS;
 5 using Android.Widget;
 6 using System.Threading;
 7 using System.Threading.Tasks;
 8
 9 namespace Catcher.AndroidDemo.SplashDemo
10 {
11     [Activity(Label = "SplashActivity", MainLauncher = true,NoHistory =true ,Theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen")]
12     public class SplashActivity : Activity
13     {
14         protected override void OnCreate(Bundle savedInstanceState)
15         {
16             base.OnCreate(savedInstanceState);
17
18             SetContentView(Resource.Layout.splash);
19             //version‘s infomation
20             var tvVersion = FindViewById<TextView>(Resource.Id.tv_version);
21             tvVersion.Text ="Version "+ PackageManager.GetPackageInfo(this.PackageName,PackageInfoFlags.MatchAll).VersionName;
22            //Method 1:
23             //用过java写Android的应该比较熟悉
24             new Handler().PostDelayed(() =>
25             {
26                 Intent intent = new Intent(this, typeof(MainActivity));
27                 StartActivity(intent);
28                 this.Finish();
29             }, 5000);
30             //Method 2:
31             //这种写法只是休眠5秒然后就把这个页面闪现一下就跳转到主页面了
32             //Thread.Sleep(5000);
33             //this.StartActivity(typeof(MainActivity));
34             //this.Finish();
35             //Method 3:
36             //这种写法改进了第二种写法的出现的问题
37             //Thread thread =  new Thread(() =>
38             //{
39             //    Thread.Sleep(5000);
40             //    Intent intent = new Intent(this, typeof(MainActivity));
41             //    StartActivity(intent);
42             //    this.Finish();
43             //});
44             //thread.Start();
45             //Method 4:
46             //用Task来实现
47             //Task task = new Task(() =>
48             //{
49             //    Task.Delay(5000);
50             //});
51             //task.ContinueWith(t =>
52             //{
53             //    StartActivity(new Intent(this, typeof(MainActivity)));
54             //    this.Finish();
55             //},TaskScheduler.FromCurrentSynchronizationContext());
56             //task.Start();
57         }
58     }
59 }  

在SplashActivity中,写了几种简单的实现。还是从头到尾讲一下吧。

MainLauncher = true  表明我们这个Activity是第一个启动的,同时记得把新建项目生成的MainActivity的这个属性改为false或者去掉

NoHistory =true    见名知意啦~~

Theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen"

这个是主题,默认的有好多好多,为了方便就没有自己去写一个,而是在默认的主题中挑了一个没有标题栏,全屏显示的

可以打开设计页面看看有多少

PackageManager.GetPackageInfo(this.PackageName,PackageInfoFlags.MatchAll).VersionName 

这一句是取出app的版本信息。

第一种方法是通过实例化一个Handler对象,调用这个对象的postdelayed方法来实现的。

这种方法是比较贴近Java开发的那种写法。

postdelayed方法有两个重载

1         public bool PostDelayed(Action action, long delayMillis);
2         [Register("postDelayed", "(Ljava/lang/Runnable;J)Z", "")]
3         public bool PostDelayed(IRunnable r, long delayMillis);  

第一个是直接用的委托来实现,本文中用的也正是这个方法。

第二个用的是Runnable,具体的写法可参考如下:

1           new Handler().PostDelayed(new Java.Lang.Runnable(() =>
2             {
3                 Intent intent = new Intent(this, typeof(MainActivity));
4                 StartActivity(intent);
5                 this.Finish();
6             }), 5000);  

来看看Runnable

1     [Register("mono/java/lang/Runnable")]
2     public sealed class Runnable : Object, IRunnable, IJavaObject, IDisposable
3     {
4         public Runnable(Action handler);
5         public void Run();
6     }  

最后我们要用的话还是得传一个委托过去,效果是与文中的方法一一致的。

第二种方法是直接明了,休眠一段时间在出来,不过这个方法貌似用的并不爽,因为无论休眠时间

设置多长,都是在休眠时间快结束时,突然闪现一下Splash页面然后就到主页面了。如果我在启动

页面那里还有动画在展现,那不是很坑。

第三种方法,可以说是在第二种方法的基础上改进的,能达到和其他方法一样的效果。

第四种方法,使用Task来实现。这也是官网示例里面用到的一种方法。不过这个方法得到的效果

不是很理想,Splashd页面出现不到5秒(大概停了2,3秒)就跳转到主页面了。

在这几种方法中也给出了启动单个Activity的多种方法,可以随个人喜好来选择。

最后放一张效果图

示例代码:

https://github.com/hwqdt/Demos/tree/master/src/Catcher.AndroidDemo/Catcher.AndroidDemo.SplashDemo

时间: 2024-11-09 00:48:09

Xamarin.Android之Splash的几种简单实现的相关文章

Xamarin.Android和UWP之MVVM的简单使用(一)

0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmlight,mvvmcross等, 我们的主题是移动端,所以主要讲mvvmlight,mvvmcross,这篇主要讲MvvmLight,下篇讲MvvmCross. 还是以Demo的形式来谈使用. 0x02 简单的MVVM(mvvmlight) Demo 先来个web版最简单的MVVM效果,然后在按xamar

Xamarin Android -创建Splash Screen (一)

......(空话少说) Xamarin 开发的技术资料很少,通过学习,把自己的学习过程及其中碰到的问题与大家分享. Splash Screen 就是在应用程序启动时,出现的一张图片,一般App的Splash Screen都是动态的广告信息. 先学习一下如何加载一个固定的Splash Screen. 一.在Resource/values/Styles.xml添加代码. <?xml version="1.0" encoding="UTF-8" ?> <

Xamarin.Android之封装个简单的网络请求类

一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于HttpClient和HttpWebRequest两种方式的封装. 由于对这一块还不是很熟悉,所以可能不是很严谨. 二.先上封装好的代码 1 using System; 2 using System.Collections.Generic; 3 using System.IO; 4 using System.Json

Xamarin.Android之引导页的简单制作

0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xamarin.Android来简单实现一下.主要用到的是ViewPager,当然也就离不开Xamarin.Android.Support.v4 如果遇到不能编译的问题,可以参考Xamarin.Android之简单的抽屉布局的出错处理方案. 0x02 页面布局编写 新建一个Android项目 添加几个简单

MVP架构在xamarin android中的简单使用

好几个月没写文章了,使用xamarin android也快接近两年,还有一个月职业生涯就到两个年了,从刚出来啥也不会了,到现在回头看这个项目,真jb操蛋(真辛苦了实施的人了,无数次吐槽怎么这么丑),怪自己太年轻了,还好是给指定行业的人使用. 重新学习思考之后,再看自己在项目中的某些实现的代码,的确不尽人意,甚至想骂自己. 项目经常改,改来该去,代码一直增加,一个fragment也没什么功能,接近1000行的代码,用region括起来,开看起来还挺整齐的,找的时候就凉了.究其原因,没有一种模式,所

Xamarin.Android开发实践(十七)

Xamarin.Android之定位 一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定位,从而使我们的生活更加方便,所以本章我们将学习如何在Xamarin中进行定位的开发. 二.准备工作 因为我们的虚拟机是运行在电脑本地的,自然就没法进行定位了,但是我们可以借助DDMS这个工具帮助我们去调试. 首先要确定你的Android SDK所在的目录,读者可以通过以下方式找到: 工具->选项 然后读者打开该文件夹下的tools文件夹,我们就可以看到里面有很多以bat结果的文件,这个时候我们打开

Xamarin.Android中使用ResideMenu实现侧滑菜单

上次使用Xamarin.Android实现了一个比较常用的功能PullToRefresh,详情见:Xamarin. Android实现下拉刷新功能 这次将实现另外一个手机App中比较常用的功能:侧滑菜单.通过搜索,发现有很多侧滑菜单,有仿手机QQ的侧滑菜单,有折叠的侧滑菜单,有SlidingMenu等,不过我还是比较喜欢 ResideMenu实现的效果,所以想通过Xamarin.Android的绑定实现该效果.这次实现该菜单遇到的问题比较多,花的时间也较多,花了三四个晚上才解决所有的问题.下面是

Xamarin.Android开发实践(十四)

Xamarin.Android之ListView和Adapter 一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文中的适配器的主要内容就是将原始的数据转换成了能够供列表控件显示的项). 二.简介适配器 在开始之前我们需要先了解下适配器,首先是提供给我们使用的适配器之间的关系: 下面我们将上面的适配器进行简单的介绍: BaseAdapter:顾名思义,就是所以适配器的基类,但是我们不能将其实例化,因为它是一个虚类

Xamarin.Android之ListView和Adapter

一.前言 如今不管任何应用都能够看到列表的存在,而本章我们将学习如何使用Xamarin去实现它,以及如何使用适配器和自定义适配器(本文中的适配器的主要内容就是将原始的数据转换成了能够供列表控件显示的项). 二.简介适配器 在开始之前我们需要先了解下适配器,首先是提供给我们使用的适配器之间的关系: 下面我们将上面的适配器进行简单的介绍: BaseAdapter:顾名思义,就是所以适配器的基类,但是我们不能将其实例化,因为它是一个虚类,一般我们都是继承该类并实现其中的方法,形成形成自定义的列表(大多