2013-06-04 14 views
11

Voglio sapere come ottenere questo effetto.Android - Disabilita finta finestra di avvio dell'applicazione

La mia app (impostazione predefinita tutto), quando si fa clic sull'icona di avvio, visualizza subito una specie di finestra vuota fittizia, dove non accade nulla e quindi carica il layout in esso.

Le app "più pesanti" come YouTube, Drive, Dropbox ecc. Una volta avviate, sembrano attendere dopo l'avvio, senza mostrare quella finestra fittizia e caricare direttamente nel layout pronto.

Qualche idea su come fare questo o dove dovrei esaminare?

Grazie

// EDIT: questo non ha nulla a che fare con qualcosa di simile banca dati di carico, dove dovrei visualizzare ProgressBar, imho questo ha a che fare con roba prima esiste attività.

risposta

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

ma usare con cautela

0

È possibile chiamare il metodo setContentView ovunque si desideri nella propria attività. Prima di chiamare questo metodo verrà visualizzata una schermata vuota. Se si desidera una schermata iniziale, è possibile chiamare il metodo setContentView all'interno del metodo onCreate per visualizzare la schermata iniziale. Quindi, quando sei pronto per visualizzare la vista "principale", puoi usare un LayoutInflater per visualizzarlo. Suggerisco anche di usare un ProgressDialog per mostrare all'utente che sta caricando le informazioni.

+0

Il problema è che la mia app ha un sacco di risorse statiche, quindi suppongo che siano caricate prima che l'attività esista, ecco perché quella finestra vuota. Poi in attività ho il caricatore del cursore e sto visualizzando ProgressBar, che lampeggia appena il database non è così grande. .. Quello che voglio evitare è la prima finestra fittizia, nessuna schermata iniziale, come fanno quelle applicazioni menzionate. – urSus

0

Caricare le risorse prima di impostare il contenutoview. Ci sarà una finestra fittizia finché non si imposterà la vista usando setContentView.

MODIFICA Per evitare questa schermata. Apporta le modifiche al tuo codice.

1) Non eseguire lavori pesanti sul metodo onCreate. Esegui un thread separato per questo.

2) Impostare vista dei contenuti subito dopo la linea di super.onCreate()

super.onCreate(savedInstanceState); 
    setContentView (R.layout.splash_screen); 

3) Applicare seguente tema per la vostra applicazione.

Definire tema in stile

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

Nei tuoi Manifest

 <application 
     .... 

     android:theme="@style/Theme.MyTheme" 
     .... 
     > 

questo è tutto.

+0

Questo tipo non ha senso per me. Dovrei caricare le risorse prima di setContentView() e la finestra fittizia verrà visualizzata fino a quando setContentView non è impostato, giusto? Non voglio quella finta finestra. – urSus

+0

Quindi non è un buon comportamento dell'app lasciare che l'utente attenda l'applicazione senza mostrare alcuna schermata iniziale. Dovresti visualizzare qualche schermata iniziale mentre le risorse vengono caricate in background. – Adnan

+0

È solo secondo o due, ma quella finestra vuota emette UX errato nel mio opionion, quindi voglio saltarlo. Anche le app di Google lo fanno (Gmail visualizza la finestra fittizia, Drive non lo fa - check it out)/Quando sto caricando il database del corso, sto mostrando la barra di avanzamento, ma secondo me, sto aspettando tutte le risorse statiche ecc. l'attività. – urSus

0

Questo creerà una finestra di anteprima su misura per la vostra attività.

creare uno stile in styles.xml come

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

Nel file manifesto utilizzare il tema creato in precedenza. Per esempio:

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

Nella vostra attività di modifica lo sfondo della finestra di nuovo a zero in onCreate()

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

ti suggerisco di non disabilitare la finestra di caricamento manichino con:

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

perché potresti incontrare diversi problemi. Ad esempio, se si tenta di animare un AlertDialog, immettere l'animazione non funzionerà (esperienza personale).

La soluzione giusta è impostare il tema dell'applicazione come nella schermata dell'attività principale (stesso stile ActionBar, stesso colore di sfondo). Nella mia applicazione dopo esperimenti diversi ho trovato la soluzione giusta per le mie esigenze. (ho un'attività principale con sfondo bianco, senza ActionBar, solo pieno schermo il layout personale)

1 - styles.xml: aggiungere nuovo stile come questo (togliere ActionBar e impostare lo stesso colore della mia attività principale di sfondo)

<style name="LoadingTheme" parent="@android:style/Theme.Light.NoTitleBar.Fullscreen"> 
    <item name="android:windowBackground">@color/white_smoke</item> 
</style> 

2 - AndroidManifest.xml: impostare il mio tema per attività principale a "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> 

e alla fine ho avere una finestra di caricamento fittizia completamente vuota senza ActionBar con carico MainActivity morbido e animazioni funzionanti.

Spero di essere utile.

+1

Questo funziona, senza bisogno di altri workaround! –

Problemi correlati