Android - 禁用应用程序的虚拟启动窗口

时间:2013-06-04 16:24:56

标签: android window startup

我想知道如何实现这种效果。

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

“重型”应用程序,如YouTube,云端硬盘,Dropbox等,启动时似乎等待启动后,没有显示虚拟窗口并加载到准备好的布局中。

知道怎么做或者我应该在哪里研究?

由于

//编辑:这与加载数据库无关,我应该在其中显示progressBar,imho这与活动存在之前的内容有关。

5 个答案:

答案 0 :(得分:24)

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

<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 :将主要活动的主题设置为&#34; LoadingTheme&#34;

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

希望有所帮助。

答案 1 :(得分:10)

<style name="Theme.MyTheme" parent="android:style/Theme" >
    ....
    <item name="android:windowDisablePreview">true</item>
    ....
</style>

但请谨慎使用

答案 2 :(得分:0)

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

答案 3 :(得分: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"
        ....
         > 

多数民众赞成。

答案 4 :(得分:0)

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

在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"
   />

在您的活动中,在onCreate()

中将窗口背景更改回null
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setBackgroundDrawable(null);
    setContentView(R.layout.main);
}