21

我想知道如何达到这个效果。

我的应用程序(默认所有内容),当单击启动器图标时,会立即显示某种空的虚拟窗口,其中什么都没有发生,然后将布局加载到其中。

YouTube、Drive、Dropbox 等“较重”的应用程序在启动时似乎会在启动后等待,而不会显示该虚拟窗口并直接加载到就绪布局中。

知道如何做到这一点或我应该在哪里调查?

谢谢

//编辑:这与加载数据库之类的东西无关,我应该在其中显示进度条,恕我直言,这与活动存在之前的东西有关。

4

5 回答 5

32

我建议您不要使用以下方法禁用虚拟加载窗口:

<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。

希望能有所帮助。

于 2014-05-23T08:40:54.883 回答
10
<style name="Theme.MyTheme" parent="android:style/Theme" >
    ....
    <item name="android:windowDisablePreview">true</item>
    ....
</style>

但谨慎使用

于 2013-06-06T09:42:12.433 回答
2

这将为您的活动创建一个自定义预览窗口。

在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);
}
于 2013-06-08T20:58:13.093 回答
0

您可以在活动中的任何位置调用该setContentView方法。在调用此方法之前,它将显示一个空白屏幕。如果你想要一个闪屏,你可以在方法中调用setContentView方法onCreate来显示闪屏视图。然后,当您准备好显示“主”视图时,您可以使用 aLayoutInflater来显示它。我还建议使用 aProgressDialog向用户显示正在加载信息。

于 2013-06-04T16:46:18.237 回答
0

在设置内容视图之前加载您的资源。在您不使用 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"
        ....
         > 

而已。

于 2013-06-04T16:47:21.607 回答