Comment utiliser une image d'arrière-plan dans un thème/style d'activité?
Si je fais cela en utilisant une couleur:
<style name="CustomTheme" parent="Android:Theme.Light">
<item name="Android:windowBackground">@color/custom_theme_color</item>
</style>
Cela fonctionne correctement, mais si je remplace la ligne par:
<item name="Android:windowBackground">@drawable/splash_image</item>
L'image s'affiche correctement, mais tout le contenu est écrasé dans un petit bloc dans le coin supérieur gauche de l'écran. L'ombre sous la barre d'état est également coupée ou gâchée.
J'utilise Mono pour Android et l'image est un png à neuf patchs valide.
Je n'utilise pas non plus de thèmes, donc dans la disposition de l'activité j'ajouterais
Android:background="@drawable/splash_image"
Je n'utilise pas de thèmes ou quoi que ce soit, donc je ne sais pas comment cela affectera cela, mais j'ai défini mon arrière-plan comme ceci:
getWindow().setBackgroundDrawableResource(R.drawable.background_image);
dans onCreate
Ma solution a été de changer Android: windowBackground en 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>
J'avais besoin d'une image de démarrage qui ressemblait à l'activité initiale de mon application et qui rencontrait le même problème. J'ai eu de la chance avec windowContentOverlay au lieu de windowBackground. Le dessinable est apparu sous la barre d'état dans la même position exacte qu'une mise en page réelle. Il a fonctionné sur Android 2.2, Android 3.0 et Android 4.1.
C'est mon style:
<style name="SplashTheme" parent="Android:style/Theme.Light">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowContentOverlay">@drawable/splash</item>
</style>
Mon dessinable splash.xml imite l'en-tête de mon interface utilisateur à l'aide de la liste de couches:
<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>
Je pense qu'ActionBar a également des moyens intégrés pour gérer cela, si votre application l'utilise. Le exemple MonoIO semble avoir une telle image de lancement.
Vous pouvez utiliser le Android:gravity="fill"
au lieu de Android:gravity="center"
,
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:opacity="translucent">
<item>
<bitmap
Android:gravity="fill"
Android:src="@drawable/splash_screen" />
</item>
</layer-list>
Remarque: Cela dépendra de votre forme et de la taille de l'image de démarrage. Dans mon cas, par l'utilisation de Android:gravity="fill"
mon splash est parfait. Vous pouvez utiliser les différents attributs de gravité sur le type de votre image de démarrage.