23

¿Cómo uso una imagen de fondo en un tema/estilo de actividad?Android Activity Background Image

Si hago esto usando un color:

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

Funciona correctamente, pero si se sustituye la línea con:

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

La imagen se muestra correctamente, pero todo el contenido está aplastado en un pequeño bloque en la esquina superior izquierda de la pantalla. La sombra debajo de la barra de estado también está cortada o arruinada.

Estoy usando Mono para Android y la imagen es un png válido de nueve parches.

+0

Para todo el mundo leyendo esto aquí ... ser consciente de que su estirable que se utiliza en windowBackground como AppTheme personalizada será cargado totalmente decodificado en su montón. Incluso una imagen pequeña en tamaño (como 90KiB) puede dar como resultado una asignación de 90MiB y más, debido a la decodificación realizada en tiempo de ejecución. Esto causará problemas OutOfMemory más rápido que la luz. :) – JacksOnF1re

+0

Para obtener información adicional, lea este artículo sobre cómo configurar correctamente la pantalla de inicio: https://www.bignerdranch.com/blog/splash-screens-the-right-way/ – JacksOnF1re

Respuesta

9

No consumo temas o nada, así que no estoy seguro de cómo afectará esto, pero me puse mis antecedentes como esto:

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

en onCreate

+3

Desaconsejo este enfoque, porque es más claro definirlo en el tema. Permite que Android lo muestre inmediatamente cuando se inicia la actividad, en lugar de ver un breve parpadeo cuando se ejecuta el código. –

16

también I don' temas utilizar t, por lo que en el diseño de la actividad yo añadiría

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

Gracias muchachos, pero necesito usar un tema ya que el contenido del diseño llega tarde. En mono para Android, hay unos segundos de retraso en el inicio. Necesito que se muestre la imagen antes de que realmente se inicie el tiempo de ejecución. Como el diseño solo se aplica después de que se haya iniciado el tiempo de ejecución, tengo que usar el tema, ya que se aplica inmediatamente. – Matthew

+0

No hay problema. Estoy investigando temas en este momento debido a una pregunta que hice, así que si lo resuelvo, me pondré en contacto contigo. – VicVu

+0

¿Alguna suerte con esto? – Matthew

4

necesitaba tener una imagen de bienvenida que se parecía a la actividad inicial de mi aplicación y se topó mismo problema. He tenido suerte con windowContentOverlay en lugar de windowBackground. El dibujable apareció debajo de la barra de estado en la misma posición exacta que un diseño real. Ha funcionado en Android 2.2, Android 3.0 y Android 4.1.

Esta es mi estilo:

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

Mi splash.xml imita dibujable mi cabecera capa de interfaz de usuario usando lista:

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

Creo Barra de acciones también tiene algunas de ellas construidas en formas para manejar esto, si su aplicación lo usa. El MonoIO sample parece tener una imagen de inicio de este tipo.

+0

¿Es posible agregar una vista de texto a su splash.xml? Necesito mostrar una pantalla de inicio con el logotipo y un texto como Conectar ... – v4r

+0

cómo cambiar el tamaño de la imagen de fondo, para que se ajuste al ancho de la pantalla y mantenga la relación de aspecto, con esta solución? – pfaehlfd

+0

No he desarrollado Android en años. Recomendar nueva pregunta de StackOverflow. – t9mike

6

Mi solución fue cambiar el android: windowBackground a 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>