我想知道如何达到这个效果。
我的应用程序(默认所有内容),当单击启动器图标时,会立即显示某种空的虚拟窗口,其中什么都没有发生,然后将布局加载到其中。
YouTube、Drive、Dropbox 等“较重”的应用程序在启动时似乎会在启动后等待,而不会显示该虚拟窗口并直接加载到就绪布局中。
知道如何做到这一点或我应该在哪里调查?
谢谢
//编辑:这与加载数据库之类的东西无关,我应该在其中显示进度条,恕我直言,这与活动存在之前的东西有关。
我建议您不要使用以下方法禁用虚拟加载窗口:
<style name="Theme.MyTheme" parent="android:style/Theme" >
....
<item name="android:windowDisablePreview">true</item>
....
</style>
因为你可能会遇到几个问题。例如,如果您尝试为 AlertDialog 设置动画,则输入动画将不起作用(个人经验)。
正确的解决方案是将您的应用程序的主题设置为您的主活动屏幕(相同的 ActionBar 样式,相同的背景颜色)。在我经过多次实验后的应用中,我找到了满足我需求的正确解决方案。(我有一个空白背景的主要活动,没有ActionBar,只是全屏个人布局)
1 - styles.xml:像这样添加新样式(删除 ActionBar 并设置与我的主要活动相同的背景颜色)
<style name="LoadingTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@color/white_smoke</item>
</style>
2 - AndroidManifest.xml:将我的主要活动主题设置为“LoadingTheme”
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.company.appname.MainActivity"
android:label="@string/app_name"
android:theme="@style/LoadingTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
....
</application>
最后,我有完整的空白虚拟加载窗口,没有带有软 MainActivity 加载和工作动画的 ActionBar。
希望能有所帮助。
<style name="Theme.MyTheme" parent="android:style/Theme" >
....
<item name="android:windowDisablePreview">true</item>
....
</style>
但谨慎使用
这将为您的活动创建一个自定义预览窗口。
在styles.xml 中创建一个样式,例如
<style name="MyTheme" parent="@android:style/Theme.Holo.NoActionBar">
<item name="android:windowBackground">@color/myBackgroundColor</item>
</style>
在您的清单文件中使用上面创建的主题。例如:
<activity android:name=".MyActivity"
android:label="@string/app_name"
android:theme="@style/MyTheme"
/>
在您的活动中,将窗口的背景更改回 nullonCreate()
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().setBackgroundDrawable(null);
setContentView(R.layout.main);
}
您可以在活动中的任何位置调用该setContentView
方法。在调用此方法之前,它将显示一个空白屏幕。如果你想要一个闪屏,你可以在方法中调用setContentView
方法onCreate
来显示闪屏视图。然后,当您准备好显示“主”视图时,您可以使用 aLayoutInflater
来显示它。我还建议使用 aProgressDialog
向用户显示正在加载信息。
在设置内容视图之前加载您的资源。在您不使用 setContentView 设置视图之前,将会有一个虚拟窗口。
编辑 以避免此屏幕。对您的代码进行更改。
1) 不要在活动 onCreate 方法中做任何繁重的工作。为它运行一个单独的线程。
2) 在 super.onCreate() 行之后设置内容视图
super.onCreate(savedInstanceState);
setContentView (R.layout.splash_screen);
3)将以下主题应用于您的应用程序。
在风格中定义主题
<resources>
<style name="Theme.MyTheme" parent="android:style/Theme" >
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@drawable/any_default_background</item>
</style>
</resources>
在您的清单中
<application
....
android:theme="@style/Theme.MyTheme"
....
>
而已。