J'ai une application Android qui affiche un écran blanc pendant 2 secondes au démarrage. Mes autres applications ne le font pas, mais celle-ci le fait. J'ai également mis en place un écran de démarrage avec l'espoir de résoudre ce problème. Devrais-je augmenter le temps de sommeil de mon écran de démarrage? Merci.
Il suffit de mentionner le thème transparent à l’activité de démarrage dans le fichier AndroidManifest.xml
Comme:
<activity
Android:name="first Activity Name"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
et étendre cet écran avec Activity
classe à la place de AppCompatActivity
.
comme :
public class SplashScreenActivity extends Activity{
----YOUR CODE GOES HERE----
}
Mettez ceci dans un style personnalisé et cela résoudra tous les problèmes. L'utilisation du correctif hacky translucent rendra la barre de tâches et la barre de navigation translucides et donnera à l'écran de démarrage ou à l'écran principal l'aspect de spaghettis.
<item name="Android:windowDisablePreview">true</item>
Créez un style dans votre fichier style.xml comme suit:
<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>
</style>
et utilisez-le avec votre activité dans AndroidManifest en tant que:
<activity Android:name=".ActivitySplash" Android:theme="@style/Theme.Transparent">
Comme vous tube .. initialement, ils affichent l’icône de l’icône au lieu de l’écran blanc. Et après 2 secondes montre l'écran d'accueil.
commencez par créer un fichier XML pouvant être dessiné dans res/drawable.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item
Android:drawable="@color/gray"/>
<item>
<bitmap
Android:gravity="center"
Android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>
Vous allez ensuite définir cela comme arrière-plan de votre activité Splash dans le thème. Accédez à votre fichier styles.xml et ajoutez un nouveau thème pour votre activité Splash.
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/background_splash</item>
</style>
</resources>
Dans votre nouveau SplashTheme, définissez l’attribut d’arrière-plan de la fenêtre sur votre dessin XML. Configurez-le en tant que thème de votre activité splash dans votre fichier AndroidManifest.xml:
<activity
Android:name=".SplashActivity"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Ce lien donne ce que vous voulez. Procédure pas à pas . https://www.bignerdranch.com/blog/splash-screens-the-right-way/
METTRE À JOUR:
Le layer-list
peut être encore plus simple comme ceci (qui accepte également les dessins vectoriels pour le logo centré, contrairement à la balise <bitmap>
):
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
<!-- Background color -->
<item Android:drawable="@color/gray"/>
<!-- Logo at the center of the screen -->
<item
Android:drawable="@mipmap/ic_launcher"
Android:gravity="center"/>
</layer-list>
Vous devriez lire cet article de Cyril Mottier: Lancement d'une application Android magnifique
Vous devez personnaliser votre Theme
dans style.xml et éviter de le personnaliser dans votre onCreate
en tant que ActionBar.setIcon/setTitle/etc.
Voir aussi la documentation sur Performance Tips de Google.
Utilisez Trace View
et Hierarchy Viewer
pour afficher l'heure d'affichage de vos vues: Optimisation des performances Android / Optimisation des performances sous Android
Utilisez AsyncTask
pour afficher certaines vues.
Ceci est mon AppTheme sur un exemple d'application:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:windowIsTranslucent">true</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Comme vous pouvez le constater, j’ai les couleurs par défaut, puis j’ai ajouté le Android:windowIsTranslucent
et l’ai défini sur true
.
Pour autant que je sache en tant que développeur Android, il s'agit de la seule chose à définir pour masquer l'écran blanc au démarrage de l'application.
Les deux propriétés fonctionnent utilisez l'une d'elles.
<style name="AppBaseThemeDark" parent="@style/Theme.AppCompat">
<!--your other properties -->
<!--<item name="Android:windowDisablePreview">true</item>-->
<item name="Android:windowBackground">@null</item>
<!--your other properties -->
</style>
Le fond blanc provient de l'Apptheme.Vous pouvez afficher quelque chose d'utile, comme le logo de votre application au lieu de l'écran blanc. Il peut être créé à l'aide d'un thème personnalisé.
Android:windowBackground=""
attribut . La valeur de l'attribut peut être une image, une liste de couches ou n'importe quelle couleur.
Le user543 answer est parfait
<activity
Android:name="first Activity Name"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Mais:
Vous êtes LAUNCHER L'activité doit étendre la Activité, et non pas AppCompatActivity tel qu'il était par défaut!
Le fond blanc est dû au fait que Android commence pendant le chargement de l'application en mémoire. Il peut être évité si vous ajoutez simplement ces 2 lignes de code sous SplashTheme.
<item name="Android:windowDisablePreview">true</item>
<item name="Android:windowIsTranslucent">true</item>
Il peut être corrigé en définissant le thème dans votre manifeste comme suit:
<activity
Android:name=".MySplashActivityName"
Android:theme="@Android:style/Theme.Translucent.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
et ensuite si vous obtenez
Java.lang.IllegalStateException: vous devez utiliser un thème Theme.AppCompat (ou un descendant) avec cette activité.
alors vous devrez peut-être étendre Activity au lieu de AppCompatActivity dans votre MySplashActivity.
J'espère que ça aide!
j'ai également eu le même problème dans l'un de mes projets. Je l'ai résolu en ajoutant quelques paramètres suivants dans le thème fourni à l'écran de démarrage.
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>
Vous pouvez trouver la raison et la résolution dans ce billet de blog écrit par moi. J'espère que ça aide.
Sa solution est très simple!
Il y a Trois Raisons fondamentales de ce problème
Solutions:
Solution 1:
Remove the Heavy Task from onCreateView() function and place it some where appropriate place.
Solution 2:
Reduce the Thread Sleep time.
Solution 3:
Remove the Third party library at app initialize at implement them with some good strategy.
Dans mon cas, j'utilise Sugar ORM qui pose ce problème.
Partager pour améliorer.
Ci-dessous le lien qui suggère comment concevoir un écran de démarrage. Pour éviter un arrière-plan blanc/noir, nous devons définir un thème avec splash background et définir ce thème pour qu'il éclabousse dans un fichier manifeste.
https://Android.jlelse.eu/right-way-to-create-splash-screen-on-Android-e7f1709ba154
splash_background.xml dans le dossier res/drawable
<?xml version=”1.0" encoding=”utf-8"?>
<layer-list xmlns:Android=”http://schemas.Android.com/apk/res/Android">
<item Android:drawable=”@color/colorPrimary” />
<item>
<bitmap
Android:gravity=”center”
Android:src=”@mipmap/ic_launcher” />
</item>
</layer-list>
Ajouter les styles ci-dessous
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- Splash Screen theme. -->
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="Android:windowBackground">@drawable/splash_background</item>
</style>
Dans Manifest, définissez le thème comme indiqué ci-dessous
<activity
Android:name=".SplashActivity"
Android:theme="@style/SplashTheme">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
vous devez désactiver Instant Run Android Studio Settings.
Fichier> Paramètres> Construire, Exécution, Déploiement> Exécution instantanée - Vérifier toutes les options indiquées ici.
Remarque: Problème d'écran blanc en raison de Exécution instantanée concerne uniquement les versions Debug.
Essayez le code suivant:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowActionBar">false</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowIsTranslucent">true</item>
</style>
Ce code fonctionne pour moi et fonctionnera sur tous les appareils Android.