2013-06-04 33 views
11

我想知道如何实现此效果。Android - 禁用应用程序的虚拟启动窗口

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

“重量级”应用程序(如YouTube,Drive,Dropbox等)启动后似乎在启动后等待,不显示该虚拟窗口并正确加载到准备好的布局中。

任何想法如何做到这一点或我应该在哪里看看?

感谢

//编辑:此无关的东西,如装载数据库,在那里我应该显示进度条,恕我直言,这与东西做活动之前存在。

回答

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

但谨慎

0

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

+0

问题是,我的应用程序有很多静态资源等,所以我的猜测是那些在活动存在之前加载的,所以这就是为什么那个空白窗口。然后在活动中我有光标加载器,我正在显示ProgressBar,只是闪烁,因为数据库不是那么大。 ..我想避免的是第一个虚拟窗口,没有启动屏幕,因为提到的应用程序。 – urSus

0

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

完蛋了。

+0

这种感觉对我没有意义。我应该在setContentView()之前加载资源,并且将显示虚拟窗口,直到setContentView未设置,对吧?我不想要那个虚拟窗口。 – urSus

+0

然后,让用户等待应用程序而不显示任何启动屏幕并不是一个好的应用程序行为。当你的资源在后台加载时,你应该显示一些启动画面。 – Adnan

+0

它只是一两个,但是那个空白的窗口在我的opionion中给出了糟糕的用户体验,所以我想跳过它。谷歌应用程序也这样做(Gmail显示虚拟窗口,Drive不 - 检查出来)/当我加载数据库时,我正在显示进度条,但在我看来,我正在等待所有静态资源等,而不是活动。 – urSus

0

这种使用将创建活动为您提供自定义的预览窗口。

<style name="MyTheme" parent="@android:style/Theme.Holo.NoActionBar"> 
    <item name="android:windowBackground">@color/myBackgroundColor</item> 
</style> 

创建styles.xml样式清单档案中的使用上面创建的主题。 对于如:

<activity android:name=".MyActivity" 
    android:label="@string/app_name" 
    android:theme="@style/MyTheme" 
    /> 

在你的活动改变窗口的背景回空在onCreate()

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getWindow().setBackgroundDrawable(null); 
    setContentView(R.layout.main); 
} 
22

我建议你不要使用禁用虚拟装载时限:

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

,因为你可能遇到几个问题。例如,如果您尝试设置AlertDialog的动画效果,请输入动画不起作用(个人体验)。

正确的解决方案是将应用程序的主题设置为主要活动屏幕(相同的ActionBar风格,相同的背景颜色)。 在我的应用经过几次实验之后,我找到了适合我需求的解决方案。 (我有空白的背景,没有动作条,只是全屏个人布局的主要活动)

1 - styles.xml:添加新的风格是这样的(除去动作条,并设置我的主要活动相同的背景颜色)

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

希望对您有所帮助。

+1

这个工程,不需要其他解决方法! –

相关问题