Android启动画面详解
图片来源:justinmind
启动画面是在打开应用时加载的屏幕。当你首次打开应用程序时,会出现一个加载屏幕,也称为启动屏幕或启动画面。加载完成后,你将进入一个更有用的屏幕,可以执行各种活动。
启动画面只会在你的屏幕上短暂出现;如果你转过头去,可能会错过它们。通常,你会注意到公司名称、标志,以及幸运的话,公司口号。
启动画面通常使用以下三种方法之一来实现,你可以在这里找到这些方法:
使用计时器
我们在onCreate() 中构建一个启动画面活动和一个线程,以便在显示2/3秒后,使用计时器**(第一种方法)** 进入我们首选的活动以显示启动画面。在此处查看如何使用这种简单的技术:
启动画面的功能是在应用程序检索任何相关内容(从数据库或网络调用)时立即显示一个有吸引力的屏幕。使用上述方法来设计其布局时,SplashActivity 会产生额外的费用。
当应用程序启动缓慢时,会显示一个空白的黑色或白色屏幕,这对用户体验是不可取的。
Splash Activity的布局文件加载缓慢会导致冷启动出现。因此,我们将利用应用程序主题的功能来设计我们的初始布局,而不是从头开始创建它(我们的第二种方法)。
使用启动器主题
在制作布局之前,应用程序主题被实例化。使用下面解释的layer-list方法,在主题中创建一个可绘制对象,其中包括活动的图标和背景。
因此,对于我们的启动操作,我们将在清单中指定一个自定义主题。使用以下步骤创建启动画面的主题。
步骤1
使用所需的图像作为位图在drawable/splash background.xml中创建一个启动画面背景。
步骤2
在drawable/bg gradient.xml中创建渐变,该渐变将用作应用程序徽标的背景;根据你的应用程序,背景可以是渐变或任何颜色。
步骤3
在res/values/themes.xml中创建启动画面样式。
步骤4
通过创建一个名为SplashScreenActivity的空活动,在AndroidManifest.xml中将样式设置为活动的主题。
步骤5
从SplashScreenActivity.java传递Intent到MainActivity.java
因为启动画面已从清单中加载,所以无需使用任何XML布局设置**setContentView()**。如果你想要显示一个固定时间的启动画面(例如五秒钟),则可以创建一个处理程序。计时器还可以让你在主活动中从云端下载数据,这可能是比在主屏幕上显示对话框更好的策略。
现在我们的启动画面已经运作,那么应该将什么尺寸的图像放入drawable文件夹中呢?
始终将你的app_logo.png放在drawable-xxhdpi文件夹中,以确保在大多数情况下,你的标志将自动调整大小以适应所有类型的手机屏幕。
此外,请确认图像分辨率不超过1000x1000像素。根据你选择的分辨率,可能会更少。现在有许多不同样式的启动画面,屏幕上有许多徽标。这怎么可能呢?
借助上述示例,我们实施了类似Twitter的启动画面,现在只需对drawable/splash background.xml进行微小修改,就可以制作类似Facebook的启动画面。
只需在你的启动画面中包含尽可能多的项即可。
启动画面API
随着Android 12的发布,推出了新的启动画面API。在Android 12上,每个应用程序默认会显示一个带有应用程序符号的启动画面。听起来很棒,直到你意识到如果你正在使用活动或片段显示启动画面,则会首先出现Android 12默认的启动画面,然后出现你自己的启动画面。现在有两个启动画面,它们很可能彼此差异很大。设计不一致,用户干扰更大。为了使你的启动画面具有更统一的外观并减少对用户的干扰,现在必须添加对Android 12的支持。
该API提供了与早期API级别的向后兼容性以及通过AnimatedVectorDrawable或AnimationDrawable支持动画图标。请喝一杯咖啡并跟随以下步骤,完成后你将拥有一个与设备主题匹配的动画启动画面。
图片来源:谷歌
设置
在访问新API之前,你必须在应用程序中进行一些设置。我们将利用此API的向后兼容性,并为早期的Android版本包括一个启动画面。
- 在应用程序模块build.gradle中,修改你的compileSdk。将Gradle中的Splash Screen API依赖项设置为版本31。为了向后兼容,我们将使用紧凑版。
2.制作两个具有相同名称的文件:splash theme.xml。它们都位于values目录中,其中一个位于values-night中。为了使主题适应用户设备的暗模式或浅模式主题,我们生成了两个名为values和values-night的文件。为了更容易地组织它们以进行未来更新,我们将两个文件命名为相同的名称。
提示: 当通过右键单击值目录创建新的值资源文件时,第一个文件保存在默认值目录中;在目录名称框中简单输入值-夜间即可将后续文件保存在值-夜间目录中。如果你的项目视图设置为Android,那么这个目录就会显示出来。
创建启动屏主题.xml
- 现在我们要为深色和浅色模式场景构建启动屏主题。Theme.SplashThemeName将是主题的名称,它将继承自Theme.SplashScreen。你的文件现在应该如下所示:
详细说明:
- 整个启动屏的背景颜色是windowSplashScreenBackground。与windowBackground类似。
- 你的启动屏图标可以在这里找到:windowSplashScreenAnimatedIcon。它有圆形边框并且居中。这是配置以获取圆形启动器图标并应该与较早的API级别一起使用。不应使用大于108dp的图标,因为它们会被裁剪。
- windowSplashScreenAnimationDuration - 这控制着动画图标的显示时间。由于AnimatedVectorDrawable可以设置它,因此它实际上对图标的动画没有影响,但它对个性化图标的退出动画很有帮助。稍后详细讲解。
- 启动屏完成后,你可以使用postSplashScreenTheme设置指定实际要使用的应用程序主题。你的默认应用程序主题应该在这里设置。
- 由于你的实际主题尚未使用,因此状态栏和导航栏属性是为了确保在启动应用程序时将它们应用到一致的主题。如果你将它们保留为默认值,API级别30及更低版本的设备可能会在状态栏和导航栏上显示默认的黑色条。为了实现统一的外观,我们希望导航栏和状态栏与windowSplashScreenBackground匹配。
确保在你的启动屏主题的深色和浅色模式下输入所需的设置。
- 打开你的manifest文件,将应用程序标记的android:theme属性设置为你先前创建的启动屏主题。它们是:@style:Theme.SplashThemeName
注意: 如果你的活动标记已经包含LAUNCHER意图(从启动器进入的入口活动),请删除其活动标记中的android:theme属性。这会导致应用程序崩溃。要注意这一点,因为标准的Android Studio模板通常会将此特性添加到入口活动中,这可能会防止你试图弄清楚出了什么问题而抓狂。
- 在你的入口活动(从启动器进入的活动)的onCreate方法中,在super.onCreate()之后,在setContentView()之前,立即使用InstallSplashScreen()。请参阅此文档:
现在,你完成了。你已成功地将启动屏包含在Android 12以及早期的Android版本中。
这个图标的大小不应超过108dp,否则它会被裁剪。该图标可以是drawable、png、jpg或webp格式。由于AnimatedVectorDrawable或AnimationDrawable仅适用于Android 12,并且在任何较低的API级别上都不起作用,因此不能将其添加到windowSplashScreenBackground。动画图标仅适用于Android 12及以上版本。如果将其设置为所有API级别,较低的API级别将看到一个空白字段。这不是我们想要的。这就引出了本书的第二章,我们将在其中为Android 12开发动画图标,同时使用正确的检查来支持早期的Android版本。
启动屏标准
使用启动屏很容易。它们用于提高品牌知名度,并为顾客提供愉快的分心等待。在这方面,以下是创建自己的启动屏时应遵循的一些指导方针:
- 避免无意义的中断
- 只使用一种颜色或一个标志。
- 适度使用动画
译自:https://proandroiddev.com/splash-screen-in-android-3bd9552b92a5
评论(0)