一般的App想要显示公司的log什么的,都会在启动的第一个页面显示,就是SplashActivity。

目前在看到一个替代SplashActivity的方案。

使用SplashActivity的时候,一般会等待几秒以后finish()该页面,进入MainActivity。

替代方案:

通过给theme设置一个属性:android:windowBackground,然后就可以显示了。

具体方案:

用户从 Home 启动一个应用,系统先解析该应用启动 Activity 所使用的主题(Theme,在Manifest 文件中定义的),并根据里面定义的基本元素来绘制一个初始界面,比如根据主题中定义的状态栏颜色和窗口背景(android:windowBackground )。当系统加载完该程序的所有资源并执行启动 Activity 的 onCreate 函数之后,就把初始界面替换为该 Activity 的实际界面。

当系统加载完该应用的资源并执行完启动 Activity 的 onCreate 函数之后

最简单的方式,就是把上面的背景图作为一张大图,设置到 android:windowBackground 中,但是这样做会有一个问题,不同的 手机屏幕大小会导致该图片被拉伸,导致公司的logo变形,这可不是我们希望的。 那么可以使用如下的方式来定义这个背景图:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" android:opacity="opaque">
<!-- 背景颜色,在上图中该颜色为黑色 -->
<item android:drawable="@android:color/black"/>
<!-- 黑色背景上的其他图片元素,比如 一个居中显示的 logo 图标-->
<item>
<bitmap
android:src="http://blog.chengyunfeng.com/@drawable/product_logo_144dp"
android:gravity="center"/>
</item>
<!-- 右上角的图标元素 -->
<item >
<bitmap android:src="http://blog.chengyunfeng.com/@drawable/top_right" android:gravity="top|right"/>
</item>
<!-- 最下面的文字,注意这里有个 bottom 设置 -->
<item android:bottom=”@dimen/product_text_bottom”>
<bitmap android:src="http://blog.chengyunfeng.com/@drawable/bottom_text" android:gravity="bottom"/>
</item>
</layer-list>

注意上面的 android:opacity=”opaque” 属性,这个是为了防止在启动的时候出现背景的闪烁。

在您的启动 Activity 的自定义 主题中设置 android:windowBackground 的值为 上面定义的 layer-list ,然后在 AndroidManifest.xml  中设置启动 Activity 的主题为该自定义主题,例如android:theme=”@style/AppTheme.Launcher” 。注意: 要设置到启动的 Activity 上而不要设置该主题到 Application 上,这样就导致所有 Activity 都具有该效果了。

当 Activity 启动后要切换正常的主题只需要在 onCreate 函数中调用 setTheme 函数即可(注意:需要在 super.onCreate 函数之前调用),例如:

 public class MyMainActivity extends AppCompatActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// 必须在 super.onCreate 之前调用
setTheme(R.style.MyTheme);
super.onCreate(savedInstanceState);
// ...
}
}

使用这种方式实现的 启动界面类似于效果上类似于传统的 Splash 界面,但是有很多好处:

1. 没有额外的 Splash Activity,我看到过很多开发者为了实现 设计师要求的 Splash 界面,单独使用一个 Activity 来显示 Splash 界面,并且等待一段时间(比如 5秒)后再 finish 该界面。

2. 没有额外的性能损耗,这是利用系统特性来实现一个启动界面,并不需要单独实现一个 Activity 来消耗系统的资源。

3. 没有额外的过度绘制。在 onCreate 函数中重新设置为正常的 theme,可以把自定义的启动背景图给删除掉,避免主题背景和自定义 View 背景造成的过度绘制。 你也可以通过  getWindow().setBackgroundDrawable(null); 来清除该自定义启动背景。

4. 启动速度更快。由于没有额外的 Splash Activity,启动速度当然很快。给用户带来愉悦的体验。

Android app Splash页的替代方案的更多相关文章

  1. Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法(转)

    转载: Android App 启动页(Splash)黑/白闪屏现象产生原因与解决办法   首先感谢博主分享,本文作为学习记录 惊鸿一瞥 微信的启动页,相信大家都不陌生. 不知道大家有没有发现一个现象 ...

  2. [置顶] Android App引导页这些坑你自己犯过吗?

    场景:测试机:华为荣耀6x 今天我自己掉入一个很蠢蠢的坑,一个引导页搞了20多分钟,不管我怎么测试用真机还是模拟器都无法运行,但是我写的demo完全没问题,好无语,我都怀疑我是不是搞android,我 ...

  3. Android App引导页这些坑你自己犯过吗?

    场景:測试机:华为荣耀6x 今天我自己掉入一个非常蠢蠢的坑,一个引导页搞了20多分钟.无论我怎么測试用真机还是模拟器都无法执行,可是我写的demo全然没问题,好无语,我都怀疑我是不是搞android, ...

  4. App启动页设计实例与技巧

    App启动页,也称闪屏页,最初是为缓解用户等待Web/iOS/Android App数据加载的焦虑情绪而出现,后被设计师巧妙用于品牌文化展示,服务特色介绍以及功能界面熟悉等平台进行设计,被赋予了更加丰 ...

  5. android脚步---APP引导页添加

    package com.leadcore.uudatoutie; import java.util.ArrayList; import com.leadcore.uudatoutie.R; impor ...

  6. Android性能优化之Splash页应该这样设计

    目前SplashActivity的设计 目前市场上的应用在启动时基本上都会先启动一个SplashActivity,作为一个欢迎界面,为什么这样设计呢? 个人总结有三个优点: 1.可以给用户更好的体验 ...

  7. Android APP应用启动页白屏(StartingWindow)优化

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 StartingWindow 的处理方式: 使用系统默认的 StartingWindow :用户点了应用图标启动应用,马上弹出系统默 ...

  8. [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络)

    [Android实例] app引导页(背景图片切换加各个页面动画效果)(申明:来源于网络) 地址: http://www.eoeandroid.com/thread-918356-1-1.html h ...

  9. 单页Html及Android App供小孩学习常用汉字

    为了检验及帮助小孩学习常用汉字,简单开发本网页应用: 常用汉字是按使用频率排序的,来源于网上: 该简单应用 有Android APP下载 “学习常用汉字_20150910.apk” 单页Html 示例 ...

随机推荐

  1. JPA学习---第一节:JPA详解

    一.详解 JPA JPA(Java Persistence API)是Sun官方提出的Java持久化规范.它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据.他的出现主要是 ...

  2. C#中读取二维数组每位的长度

    C#中的二维数组,如int[,] A=new int[a,b];则 a=A.GetLength(0);即可获得二维数组中第一维的长度. b=A.GetLength(1);即可获得二维数组中第二维的长度 ...

  3. 典型的js页面

    var myurl; var mydata; var postype = "POST"; var getype = "GET"; var jsontype = ...

  4. 2437: [Noi2011]兔兔与蛋蛋 - BZOJ

    Description Input 输入的第一行包含两个正整数 n.m.接下来 n行描述初始棋盘.其中第i 行包含 m个字符,每个字符都是大写英文字母"X".大写英文字母" ...

  5. Eclipse 创建Maven工程

    前言 开发环境 sts-3.7.2.RELEASE 创建步骤 1.开启eclipse,右键new——>other,如下图找到maven project 2.选择maven project,显示创 ...

  6. 【系统Configmachine.config与自己的应用程序的App.config/Web.Config配置节点重复】解决方法

    自己的应用程序的App.config或Web.Config文件中与系统的C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Configmachine.co ...

  7. iOS 沙盒购买,弹出“需要验证”,“继续登录”的问题?

    点击购买后,能弹出 确认购买的对话框, 您想以xxx的价格买一个xxx吗? [environment:sandbox] 点击确认购买后,弹出"需要验证" 点击继续,输入密码后.竟然 ...

  8. PHP 性能分析与实验(二)——PHP 性能的微观分析

    [编者按]此前,阅读过了很多关于 PHP 性能分析的文章,不过写的都是一条一条的规则,而且,这些规则并没有上下文,也没有明确的实验来体现出这些规则的优势,同时讨论的也侧重于一些语法要点.本文就改变 P ...

  9. Network Saboteur(Rand版)

    poj2531:http://poj.org/problem?id=2531 题意:给你一个图,图中点之间会有边权,现在问题是把图分成两部分,使得两部分之间边权之和最大.题解:随机算法 #includ ...

  10. 转一篇:文档笔记之Django QuerySet

    这个放着,说不定以后作一些更深入的查询时,用得着的. http://www.rapospectre.com/blog/7/ 今天刚刚答完辩体完检就跑来更新博客了!!! 先补上第一篇: 一般情况下,我们 ...