Android启动页面的正确打开方式 (转载)

Stella981
• 阅读 411

最近由于领导要求写一个手机APP,于是自学开始,不经意间想到使用过的手机APP在打开的时候都是会有一个启动页面,这是如何实现的呢?比较好奇,于是在网上搜到了以下这篇文章,经过个人实验的确可行,不过原文的某些描述并不是十分的清楚,个人也是经过了一些摸索才调试了出来,不管怎么样说这个方法还是蛮不错的,以下给出原文。

原文:

http://blog.csdn.net/shiguiyou/article/details/50255929

现在APP的启动页面(Splash Screen)好多都是等待3秒,好一点的还可以跳过,但是有的跳过也是假的按钮。当然像一些大厂的APP,像网易新闻等启动页面都是广告,人家要收广告费的。但是,对于一些普通的APP,有的也出现等待三秒的启动画面,出现一个大大的logo,好像告诉用户他打开的是什么应用,加深用户的映像,这完全是浪费用户的时间,给用户很差的体验!其实我只想快点进入APP啊!!!下面说下如何正确的打开Android启动页面。

Google的推荐

你也许很惊讶谷歌是支持开发者使用启动页面的,在[材料设计(Material Design)规范](https://www.google.com/design/spec/patterns/launch-screens.html)里面有写到(链接需要翻墙)。但是,以前google却把启动页面当反面教材来讲,看[这里](https://youtu.be/pEGWcMTxs3I?t=1434)(链接需要翻墙)。所以,该怎么办呢?

Android启动页面的正确方式

我相信google的说法不会自相矛盾的,新的建议和旧的建议都是站在一个角度来的,也就是说,最好不要浪费用户的时间去打开无用的启动页面。然而,好多应用一开始启动会花费一些时间,特别是第一次,你无法避免它,那么就可能会出现一个空白的页面,所以,既然这样,为什么不给用户一个更加友好的页面呢?这就是google的建议,不要浪费用户的时间,但是也不要给用户一个空白的页面,或者是一个还没初始化好的应用。
你会发现,最近谷歌更新的应用里面也使用了启动页面,比如,看一看YouTube的启动页面:

你看到在这个APP的启动页面所花费的时间正是APP所初始化配置自己的时间,第一次启动也是这样的,所以第一次是最慢的,但是如果有缓存了,那么每次再打开应该是立即打开了吧。

实现一个启动页面(Splash Screen)

实现一个启动页面可能和你想象的有点不一样。这个启动的页面必须是立即准备好的页面,即使是在Activity中加载一个xml页面也要是立刻加载好的。
所以,一般不会用layout来当启动页面。取而代之的是用一个颜色作为你的Activity的主题背景,接下来,在你的res/drawable文件夹下创建一个XML的drawable。

background_splash.xml  文件

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/gray"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

其中,需要在 values文件夹中的 colors.xml ,  添加以下语句。

Android启动页面的正确打开方式  (转载)

 Android启动页面的正确打开方式  (转载)

这里,我设置了背景颜色和一张居中的图片。
然后,在主题中,将这个设置为Activity的背景。打开你的styles.xml然后为你的Activity添加一个新的主题。

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>

</resources>

在你新的SplashTheme中,设置窗口背景属性为我们之前写的XML的drawable,就是layer-list的xml。然后在你的AndroidManifest.xml中配置一下就好了。

<activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

最后,在你的SplashActivity.class文件中,编码直接进入主页面就行了。

public class SplashActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(this, MainActivity.class);
        startActivity(intent);
        finish();
    }
}

这里发现你并没有为Activity设置layout视图,视图来自于主题!所以,这应该是最快的方法启动页面了(相比较加载layout视图)。如果你一定要通过加载layout来显示页面,可能你初始化完了才跳出页面,这时已经有点迟了,所以,你应该考虑用极短的时间来显示加载layout视图。

不要再浪费用户的时间了!但是,当用户第一次启动等待的时候还是要展示一些友好的东西给用户而不是空白!

最后,这里是原文随便翻译的,如果有什么不对的还望指出,自己就当学习笔记记录下来。

Android启动页面的正确打开方式  (转载)

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
Unity横屏
Android下发现Unity里面的Player设置,并不能完全有效,比如打开了自动旋转,启动的时候还是会横屏,修改XML添加以下代码<applicationandroid:icon"@drawable/ic\_launcher"                    android:label"@string/app\_name"
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这