Xamarin.Android之Splash的几种简单实现
对现在的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的版本信息。
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的几种简单实现的更多相关文章
- Xamarin.Android和UWP之MVVM的简单使用(二)
0x01 前言 前面一篇,Xamarin.Android和UWP之MVVM的简单使用(一),主要讲了MvvmLight的简单使用 这篇主要讲讲MvvmCross的简单使用,例子的话,还是和上篇的一样. ...
- Android传递Bitmap的两种简单方式及其缺陷
Android传递Bitmap的几种简单方式 一,通过Intent的Bundle. 比如有两个activity,A,B,从A进入B.先在A中将Bitmap写进去: Resources res=getR ...
- Xamarin.Android和UWP之MVVM的简单使用(一)
0x01 前言 就目前而言,MVVM可以说是挺流行的,无论是web端还是移动端,web端的主要代表angularjs,avalonjs等, 移动端(xamarin,uwp)的代表应该是mvvmligh ...
- Xamarin Android -创建Splash Screen (一)
......(空话少说) Xamarin 开发的技术资料很少,通过学习,把自己的学习过程及其中碰到的问题与大家分享. Splash Screen 就是在应用程序启动时,出现的一张图片,一般App的Sp ...
- Android: 自定义Tab样式,一种简单的方式。
之前看到过论坛里已经有人发过自定义Tab样式的帖子,感觉有些复杂了,这里分享个简单的方法. 1.制作4个9patch的tab样式,可参考android默认的资源 tab_unselected.9.pn ...
- Xamarin android spinner的使用方法
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=&quo ...
- Xamarin Android 中Acitvity如何传递数据
在xamarin android的开发中,activity传递数据非常常见,下面我也来记一下在android中activity之间传递数据的几种方式, Xamarin Android中Activity ...
- Xamarin.Android之引导页的简单制作
0x01 前言 对于现在大部分的APP,第一次打开刚安装或更新安装的APP都会有几个引导界面,通常这几个引导页是告诉用户 APP有些什么功能或者修改了什么bug.新增了什么功能等等等. 下面就用Xam ...
- Xamarin.Android之封装个简单的网络请求类
一.前言 回忆到上篇 <Xamarin.Android再体验之简单的登录Demo> 做登录时,用的是GET的请求,还用的是同步, 于是现在将其简单的改写,做了个简单的封装,包含基于Http ...
随机推荐
- 深入NSQ 之旅[转载]
介绍 NSQ是一个实时的分布式消息平台.它的设计目标是为在多台计算机上运行的松散服务提供一个现代化的基础设施骨架.这篇文章介绍了 基于go语言的NSQ的内部架构,它能够为高吞吐量的网络服务器带来 性能 ...
- 系统监控工具 Tsar
Tsar是淘宝的一个用来收集服务器系统和应用信息的采集报告工具,如收集服务器的系统信息(cpu,mem等),以及应用数据(nginx.swift等),收集到的数据存储在服务器磁盘上,可以随时查询历史信 ...
- linux系统编程之进程(八):守护进程详解及创建,daemon()使用
一,守护进程概述 Linux Daemon(守护进程)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.它不需要用户输入就能运行而且提供某种服务,不是对整个 ...
- LVS原理与使用(1)
负载均衡,无论是否真正了解过,但我相信所有跟编程打交道的读者都有听说.同时,它(负载均衡)也是被认为一个大型网站的标识性技术之一(但负载均衡的作用肯定不止这点用途).虽然网上也有不少关于LVS配置实用 ...
- Step by Step 配置使用HTTPS的ASP.NET Web应用
原创地址:http://www.cnblogs.com/jfzhu/p/4064654.html 转载请注明出处 有关HTTPS.SSL以及SSL证书的工作原理,参见 <HTTPS那些事(一)H ...
- 《Entity Framework 6 Recipes》中文翻译系列 (41) ------ 第七章 使用对象服务之标识关系中使用依赖实体与异步查询保存
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 7-7 标识关系中使用依赖实体 问题 你想在标识关系中插入,更新和删除一个依赖实体 ...
- FPGrowth算法总结复习
摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 关联规则(associatio rules):从大规模数据集中寻找物品建 ...
- Android-Activity-Dialog theme touch outsize
最近遇到一个蛋疼的问题: 一个Activity,主题设置成 Dialog 然后点击外面要求这个Activity 不能关闭. 这下好了,直接在 style 的 theme 里面加一个属性就好了. 加上去 ...
- Android开发-之认识palette
Android开发中,Google工程师已经给我们封装好了很多的按钮,使得我们在开发中非常的方便和便捷. 那么今天就来认识一下常用的按钮,那么在之前的课程中我已经详细讲过了Button按钮,那么这里就 ...
- 解决adb.exe' and can be executed.
百度google大家多说的是任务管理器 kill掉adb 或者重启adb server,但我任务管理器就没有adb ,猜测是某个程序占用了adb端口.于是按此思路查找. 5037为adb默认端口 查看 ...