2011-01-29 4 views
14

Quindi ho letto lo blog post di Romain Guy sull'impostazione dello sfondo della finestra e delle prestazioni percepite, e sto cercando di emularlo. È una soluzione così semplice e non è sicuro del motivo per cui non riesco a farlo funzionare, ma l'attività semplicemente si rifiuta di raccogliere lo sfondo diretto.Android: impostazione della finestra sullo sfondo dell'attività avviata

Ho un ListView che onListItemClick lancia una nuova attività, una che richiede 3-5 secondi per il caricamento completo. Mentre l'utente è in attesa, mi piacerebbe disegnare un windowBackground in modo che "vedano" l'attività prima che sia effettivamente pronta. Qui è il mio codice:

AndroidManifest frammento per l'attività avviata:

<activity 
     android:name=".activity.EditorActivity" 
     android:screenOrientation="portrait" 
     android:windowBackground="@drawable/background_editor"> 

Il layout XML per l'EditorActivity:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
    android:id="@+id/editor" 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:text="Editor" /> 
</FrameLayout> 

E, infine, il drawable essendo ambientato nel Manifesto, background_editor.xml :

<?xml version="1.0" encoding="utf-8"?> 
<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:src="@drawable/editor_bg" 
    android:tileMode="repeat" /> 

editor_bg è un file .png che si trova nella cartella pieghevole r.

Il risultato finale è l'EditorActivity viene lanciato, e tutto quello che vedo è lo sfondo di default nero con il testo "Editor" visualizzato in bianco (ho aggiunto che al test che il file XML è stato caricato correttamente.

I Ho anche provato a impostare lo sfondo di FrameLayout e TextView in modo trasparente tramite Android: background = "@ android: color/transparent", pensando che forse erano predefiniti su uno sfondo nero, ma senza fortuna

È stato un lungo pochi giorni, sono sicuro che mi manca qualcosa di semplice ... qualsiasi errore evidente che sto facendo qui?

+1

Link aggiornato al post di riferimento: http: // e roid-developers.blogspot.com/2009/03/window-backgrounds-ui-speed.html –

risposta

37

Prova a impostare lo sfondo della finestra prima di avviare la nuova attività a livello di programmazione.

getWindow().setBackgroundDrawableResource(R.drawable.my_drawable); 
1

funziona per me, se ho dichiarato questo in una Style Theme in styles.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

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

</resources> 

e nel manifesto ho impostato questo tema per la mia domanda:

<application 
    android:name="com.my_app.pack" 
    android:theme="@style/CustomTheme" > 
... 

o ad una delle mie attività:

<activity 
    android:name="..." 
    android:theme="@style/CustomTheme"> 
... 

puoi dichiarare stili a tema multiplo e aggiungerne uno a qualsiasi delle tue attività, che sovrascriverà il tema impostato sull'applicazione

2

Ho incontrato lo stesso problema e ho perso la giornata. Non possiamo impostare il tema in java come nel mio caso il controllo è arrivato su onCreate della mia attività splash molto tardi. Fino a quel momento lo schermo nero rimane visibile.

Questo mi ha dato indizio che la finestra deve essere gestita dal tema che specifichiamo in manifest.

V'è il manifesto che ho:

<activity 
     android:name=".main.activities.SplashScreen" 
     android:theme="@style/Splash" 
     android:screenOrientation="portrait"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
</activity> 

Ora Il tema ho creato è il seguente:

<style name="Splash" parent="@style/Theme.AppCompat.Light"> 
    <item name="android:windowBackground">@drawable/splash</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowNoTitle">true</item> 
    <item name="colorPrimaryDark">@color/green_09</item> 
    <item name="colorPrimary">@color/green_09</item> 
    <item name="windowActionBar">false</item> 
</style> 

Splash nella risorsa drawable che contiene una risorsa bitmap, devo modificare un un po 'per farlo sembrare perfetto non allungato e al centro:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android" 
    android:antialias="true" 
    android:dither="true" 
    android:gravity="fill" 
    android:src="@drawable/splash_screen" /> 
Problemi correlati