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

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

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

一、新建一个空白Android项目

二、添加一个layout,splash.axml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Splash页面"
android:textSize="50sp"
android:layout_marginTop="150dp"
android:gravity="center" />
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="bottom">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:id="@+id/tv_version"
android:gravity="center" />
</LinearLayout>
</LinearLayout>

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

三、添加一个Activity ,SplashActivity

 using Android.App;
using Android.Content;
using Android.Content.PM;
using Android.OS;
using Android.Widget;
using System.Threading;
using System.Threading.Tasks; namespace Catcher.AndroidDemo.SplashDemo
{
[Activity(Label = "SplashActivity", MainLauncher = true,NoHistory =true ,Theme = "@android:style/Theme.Black.NoTitleBar.Fullscreen")]
public class SplashActivity : Activity
{
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.splash);
//version's infomation
var tvVersion = FindViewById<TextView>(Resource.Id.tv_version);
tvVersion.Text ="Version "+ PackageManager.GetPackageInfo(this.PackageName,PackageInfoFlags.MatchAll).VersionName;
//Method 1:
//用过java写Android的应该比较熟悉
new Handler().PostDelayed(() =>
{
Intent intent = new Intent(this, typeof(MainActivity));
StartActivity(intent);
this.Finish();
}, );
//Method 2:
//这种写法只是休眠5秒然后就把这个页面闪现一下就跳转到主页面了
//Thread.Sleep(5000);
//this.StartActivity(typeof(MainActivity));
//this.Finish();
//Method 3:
//这种写法改进了第二种写法的出现的问题
//Thread thread = new Thread(() =>
//{
// Thread.Sleep(5000);
// Intent intent = new Intent(this, typeof(MainActivity));
// StartActivity(intent);
// this.Finish();
//});
//thread.Start();
//Method 4:
//用Task来实现
//Task task = new Task(() =>
//{
// Task.Delay(5000);
//});
//task.ContinueWith(t =>
//{
// StartActivity(new Intent(this, typeof(MainActivity)));
// this.Finish();
//},TaskScheduler.FromCurrentSynchronizationContext());
//task.Start();
}
}
}

在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方法有两个重载

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

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

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

           new Handler().PostDelayed(new Java.Lang.Runnable(() =>
{
Intent intent = new Intent(this, typeof(MainActivity));
StartActivity(intent);
this.Finish();
}), );

来看看Runnable

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

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

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

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

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

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

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

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

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

最后放一张效果图

示例代码:

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

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

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

    0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...

  2. Android传递Bitmap的两种简单方式及其缺陷

    Android传递Bitmap的几种简单方式 一,通过Intent的Bundle. 比如有两个activity,A,B,从A进入B.先在A中将Bitmap写进去: Resources res=getR ...

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

    0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...

  4. Xamarin Android -创建Splash Screen (一)

    ......(空话少说) Xamarin 开发的技术资料很少,通过学习,把自己的学习过程及其中碰到的问题与大家分享. Splash Screen 就是在应用程序启动时,出现的一张图片,一般App的Sp ...

  5. Android: 自定义Tab样式,一种简单的方式。

    之前看到过论坛里已经有人发过自定义Tab样式的帖子,感觉有些复杂了,这里分享个简单的方法. 1.制作4个9patch的tab样式,可参考android默认的资源 tab_unselected.9.pn ...

  6. Xamarin android spinner的使用方法

    <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...

  7. Xamarin Android 中Acitvity如何传递数据

    在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...

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

    0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xam ...

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

    一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...

随机推荐

  1. SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输

    SQL Server 2008, 2008 R2, 2012 and 2014 完全支持TLS1.2加密传输 微软高兴地宣布所有主流SQL Server客户端驱动和SQL Server发行版已经支持T ...

  2. Expert 诊断优化系列------------------透过等待看系统

    上一篇我们简单的介绍了,语句优化的三板斧,大部分语句三板斧过后,就算不成为法拉利也能是个宝马了.为了方便阅读给出系列文章的导读链接: SQL SERVER全面优化-------Expert for S ...

  3. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

  4. CoreData教程

    网上关于CoreData的教程能搜到不少,但很多都是点到即止,真正实用的部分都没有讲到,而基本不需要的地方又讲了太多,所以我打算根据我的使用情况写这么一篇实用教程.内容将包括:创建entity.创建r ...

  5. 毫秒级的时间处理上G的图片(生成缩略图)

    测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...

  6. SQL Server 执行计划缓存

    标签:SQL SERVER/MSSQL SERVER/数据库/DBA/内存池/缓冲区 概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之 ...

  7. 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析

    文章中引用的代码均来自https://github.com/vczh/tinymoe.   实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个tok ...

  8. TODO:小程序集成WeUI

    TODO:小程序集成WeUI WeUI 为微信 Web 服务量身设计.WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一. ...

  9. 【NodeJS 学习笔记04】新闻发布系统

    前言 昨天,我们跟着这位大哥的博客(https://github.com/nswbmw/N-blog/wiki/_pages)进行了nodeJS初步的学习,最后也能将数据插入数据库了 但是一味的跟着别 ...

  10. OO设计原则

    开闭原则(OCP) 里氏代换原则(LSP) 依赖倒转原则(DIP) 接口隔离原则(ISP) 合成/聚合利用原则(CARP) 迪米特法则(LOD)