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 ...
随机推荐
- Second Day: 关于Button监听事件的三种方法(匿名类、外部类、继承接口)
第一种:通过匿名类实现对Button事件的监听 首先在XML文件中拖入一个Button按钮,并设好ID,其次在主文件.java中进行控件初始化(Private声明),随后通过SetOnClickLis ...
- 利用结果集元数据将查询结果封装为map
package it.cast.jdbc; import java.sql.Connection; import java.sql.ParameterMetaData; import java.sql ...
- Apache许可协议Open RIA Services
Jeff Handley's进行了多年的项目--基于一份开源许可发布WCF RIA Services.遵循Apache 2许可,捐赠给Outercurve基金会的ASP.NET Open Source ...
- Mono 3.2 测试NPinyin 中文转换拼音代码
C#中文转换为拼音NPinyin代码 在Mono 3.2下运行正常,Spacebuilder 有使用到NPinyin组件,代码兼容性没有问题. using System; using System. ...
- 常用SQL[ORACLE]
1.常用系统函数 2.常用sql语句 3.一些定义和关键字 4.需要注意点 1.常用系统函数 ↑ --decode decode(column,if_value,value,elseif_ ...
- python自动化测试(3)- 自动化框架及工具
python自动化测试(3) 自动化框架及工具 1 概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...
- WPF+通过配置文件生成菜单(Menu)+源码
这个月做项目,遇到过一个通过配置文件来生成菜单的解决方案,感觉挺优雅的,特地放到博客园来,以飨读者. 说来惭愧,以前做的项目都没有这样用过,都是固定死了.如果后续有需要加入菜单,还得在重新修改UI,然 ...
- Nodejs初阶之express
PS: 2014/09/24 更新<Express 4.X 启航指南>,欢迎阅读和评论:) 老规矩,开头部分都是些自娱自乐的随想,想到哪写到哪... 到今天俺已经在俺厂工作俩年零几天了 ...
- [Linux]Linux下安装和配置solr/tomcat/IK分词器 详细实例一.
在这里一下讲解着三个的安装和配置, 是因为solr需要使用tomcat和IK分词器, 这里会通过图文教程的形式来详解它们的安装和使用.注: 本文属于原创文章, 如若转载,请注明出处, 谢谢.关于设置I ...
- gulp思考
Gulp,一个基于流的构建工具. 这是自己写的一个构建的demo,只是一个纯演示的示例,并没有完成什么项目工作.下面根据这个demo介绍一下Gulp. 上代码: gulpfile.js 'use st ...