23

Come si utilizza un'immagine di sfondo in un tema/stile di attività?Immagine sfondo attività Android

Se faccio questo utilizzando un colore:

<style name="CustomTheme" parent="android:Theme.Light"> 
    <item name="android:windowBackground">@color/custom_theme_color</item> 
</style> 

Funziona correttamente, ma se sostituisco la linea con:

<item name="android:windowBackground">@drawable/splash_image</item> 

L'immagine viene visualizzata correttamente, ma tutto il contenuto viene schiacciata in un piccolo blocco nell'angolo in alto a sinistra dello schermo. Anche l'ombra sotto la barra di stato è tagliata o incasinata.

Sto usando Mono per Android e l'immagine è un png a nove patch valido.

+0

Per tutti coloro che leggono questo documento ... sii consapevole del fatto che il tuo drawable che usi in windowBackground come App personalizzata, verrà caricato completamente decodificato nel tuo heap. Anche una piccola immagine di dimensioni (come 90 KiB) può comportare un'allocazione di 90MiB e altro, a causa della decodifica eseguita in runtime. Ciò causerà problemi OutOfMemory più veloce della luce. :) – JacksOnF1re

+0

Per ulteriori informazioni, leggere questo articolo come configurare correttamente la schermata iniziale: https://www.bignerdranch.com/blog/splash-screens-the-right-way/ – JacksOnF1re

risposta

9

Non faccio uso di temi o niente, quindi non sono sicuro di come questo influenzerà questo, ma ho impostato la mia formazione in questo modo:

getWindow().setBackgroundDrawableResource(R.drawable.background_image); 

in onCreate

+3

Scorro questo approccio, perché è più semplice definire nel tema. Consente ad Android di visualizzarlo immediatamente all'avvio dell'attività, invece di vedere un breve lampeggiamento mentre il codice viene eseguito. –

16

Ho anche don' t utilizzare i temi, così nel layout delle attività aggiungerei

android:background="@drawable/splash_image" 
+4

Grazie ragazzi, ma ho bisogno di utilizzare un tema come il contenuto del layout arriva fino a tardi. In mono per Android, ci sono alcuni secondi di ritardo all'avvio. Ho bisogno di avere l'immagine visualizzata prima che il runtime sia effettivamente avviato. Poiché il layout viene applicato solo dopo l'avvio del runtime, devo utilizzare il tema, poiché viene applicato immediatamente. – Matthew

+0

Nessun problema. Sto esaminando i temi in questo momento a causa di una domanda che ho chiesto, quindi se capisco che tornerò da te. – VicVu

+0

Hai avuto fortuna con questo? – Matthew

4

avevo bisogno di avere un'immagine iniziale che sembrava l'attività iniziale di mia app e corse in stesso problema. Ho avuto fortuna con windowContentOverlay invece di windowBackground. Il drawable è apparso sotto la barra di stato nella stessa identica posizione di un layout reale. Ha funzionato su Android 2.2, Android 3.0 e Android 4.1.

Questo è il mio stile:

<style name="SplashTheme" parent="android:style/Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@drawable/splash</item>  
</style> 

mio splash.xml imita disegnabili mio header interfaccia utente utilizzando strato-list:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!--- Background; tile is broken on Android 2.2 so just have super wide background that will get clipped --> 
    <item> 
     <bitmap android:gravity="top|left" android:src="@drawable/splash_background" /> 
    </item> 

    <!--- Icon left justified --> 
    <item> 
     <bitmap android:gravity="top|left" android:src="@drawable/header_icon" /> 
    </item> 

    <!--- Buttons/etc right justified --> 
    <item> 
     <bitmap android:gravity="top|right" android:src="@drawable/splash_buttons" /> 
    </item> 
</layer-list> 

Credo ActionBar ha anche un po 'built-in modi per gestirlo, se la tua app lo usa. Il MonoIO sample sembra avere una tale immagine di lancio.

+0

È possibile aggiungere una vista testuale a splash.xml? Devo visualizzare una schermata iniziale con il logo e un testo come Connessione ... – v4r

+0

come ridimensionare l'immagine di sfondo, quindi si adatta alla larghezza dello schermo e mantiene le proporzioni, con questa soluzione? – pfaehlfd

+0

Non ho sviluppato Android da anni. Raccomanda la nuova domanda StackOverflow. – t9mike

6

La mia soluzione è stata modificare l'androide: windowBackground per Android: background.

<?xml version="1.0" encoding="UTF-8" ?> 
<resources> 
    <style name="Theme.Splash" parent="android:Theme"> 
    <item name="android:background">@drawable/splash</item> 
    <item name="android:windowNoTitle">true</item> 
    </style> 
</resources>