2013-06-04 37 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

這個工程,不需要其他解決方法! –

相關問題