更新: (2016 年 10 月 19 日)
自最初撰写本文以来,已经出现了处理此问题的官方方法。我们提供了关于 使用 Android 创建启动画面 以及 使用 iOS 创建启动画面 的文档。官方 NativeScript 应用程序模板附带启动画面。在 iOS 应用程序中,启动画面是 App Store 审核的必备条件。
因此,我询问了网络(感谢 Google!)我们有哪些选择,结果发现最常见的方法是显示一个额外的 Activity 来显示图像,然后继续执行主 Activity。这是一种可行的方案,我的最初尝试是使用它,但我很快意识到它不适合 NativeScript 应用程序的上下文。因为我们会在 UI 线程上初始化 V8 引擎并处理所有 JavaScript 代码(请记住 JavaScript 中重写的主 Activity 的 onCreate 方法),打开一个新的 Activity 不会得到预期的结果。
在搜索其他选项没有成功的情况下,我决定仔细研究 Android 中的绘制生命周期和视觉图。引起我注意的是主 Activity 的 Window 的 setBackgroundDrawableResource(int resId) 方法。因此,与其打开一个新的 Activity 来显示图像,我决定通过更改 Window 的背景来实现。经过一些反复试验,我最终找到了一个解决方案,你可能会发现它对你的应用程序有用。
<
resources
>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<
style
name
=
"AppBaseTheme"
parent
=
"android:Theme.Light"
>
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</
style
>
<!-- Application theme. -->
<
style
name
=
"SplashTheme"
parent
=
"AppBaseTheme"
>
<!-- Disable window features like ActionBar, Title and Overlay. -->
<
item
name
=
"android:windowActionBar"
>false</
item
>
<
item
name
=
"android:windowNoTitle"
>true</
item
>
<
item
name
=
"android:windowContentOverlay"
>@null</
item
>
<
item
name
=
"android:windowBackground"
>@drawable/splashscreen</
item
>
</
style
>
<
style
name
=
"AppTheme"
parent
=
"AppBaseTheme"
>
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</
style
>
</
resources
>
<
activity
android:name
=
"com.tns.NativeScriptActivity"
android:label
=
"TestApp"
android:theme
=
"@style/SplashTheme"
>
var
application = require(
"application"
);
// 检查当前平台(我们只关心 Android)
// 或者,你可以创建 app.android.js 和 app.ios.js
var
platform = require(
"platform"
);
if
(platform.device.os === platform.platformNames.android) {
application.onLaunch =
function
(intent) {
// 在应用程序启动时挂钩 onActivityCreated 回调
application.android.onActivityCreated =
function
(activity) {
// 在 Activity 创建后应用默认主题
var
id = activity.getResources().getIdentifier(
"AppTheme"
,
"style"
, activity.getPackageName());
activity.setTheme(id);
}
}
}
嗯,差不多就是这样 - 祝你使用 NativeScript 和 Android 愉快地创建启动画面!:)