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 ...
随机推荐
- 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 ...
- Expert 诊断优化系列------------------透过等待看系统
上一篇我们简单的介绍了,语句优化的三板斧,大部分语句三板斧过后,就算不成为法拉利也能是个宝马了.为了方便阅读给出系列文章的导读链接: SQL SERVER全面优化-------Expert for S ...
- Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析
网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...
- CoreData教程
网上关于CoreData的教程能搜到不少,但很多都是点到即止,真正实用的部分都没有讲到,而基本不需要的地方又讲了太多,所以我打算根据我的使用情况写这么一篇实用教程.内容将包括:创建entity.创建r ...
- 毫秒级的时间处理上G的图片(生成缩略图)
测试环境: 测试图片(30M): 测试计时方法: Stopwatch sw1 = new Stopwatch(); sw1.Start(); //TODO...... sw1.Stop(); stri ...
- SQL Server 执行计划缓存
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/内存池/缓冲区 概述 了解执行计划对数据库性能分析很重要,其中涉及到了语句性能分析与存储,这也是写这篇文章的目的,在了解执行计划之 ...
- 跟vczh看实例学编译原理——二:实现Tinymoe的词法分析
文章中引用的代码均来自https://github.com/vczh/tinymoe. 实现Tinymoe的第一步自然是一个词法分析器.词法分析其所作的事情很简单,就是把一份代码分割成若干个tok ...
- TODO:小程序集成WeUI
TODO:小程序集成WeUI WeUI 为微信 Web 服务量身设计.WeUI 是一套同微信原生视觉体验一致的基础样式库,由微信官方设计团队为微信 Web 开发量身设计,可以令用户的使用感知更加统一. ...
- 【NodeJS 学习笔记04】新闻发布系统
前言 昨天,我们跟着这位大哥的博客(https://github.com/nswbmw/N-blog/wiki/_pages)进行了nodeJS初步的学习,最后也能将数据插入数据库了 但是一味的跟着别 ...
- OO设计原则
开闭原则(OCP) 里氏代换原则(LSP) 依赖倒转原则(DIP) 接口隔离原则(ISP) 合成/聚合利用原则(CARP) 迪米特法则(LOD)