web-dev-qa-db-fra.com

écran vide vient avant splash

Le problème principal est que l'écran de démarrage apparaît après 2-3 secondes. Avant l'écran d'accueil, une mise en page vierge apparaît, ce que je ne souhaite pas. Sinon, ça fonctionne bien. Je veux juste supprimer la mise en page vierge qui apparaît avant la page de démarrage. 

Activité principale:

public class MainActivity extends Activity {

    private static String TAG = MainActivity.class.getName();
    private static long SLEEP_TIME = 5; // Sleep for some time

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.requestWindowFeature(Window.FEATURE_NO_TITLE); // Removes title bar
        this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);  // Removes notification bar

        setContentView(R.layout.activity_main);

        // Start timer and launch main activity
        IntentLauncher launcher = new IntentLauncher();
        launcher.start();
    }

    private class IntentLauncher extends Thread {

        @Override
        /**
         * Sleep for some time and than start new activity.
         */
        public void run() {
            try {
                // Sleeping
                Thread.sleep(SLEEP_TIME*1000);
            } catch (Exception e) {
                Log.e(TAG, e.getMessage());
            }

            // Start main activity
            Intent intent = new Intent(MainActivity.this, Login.class);
            MainActivity.this.startActivity(intent);
            MainActivity.this.finish();
        }
    }

}

disposition principale

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:paddingBottom="@dimen/activity_vertical_margin"
    Android:paddingLeft="@dimen/activity_horizontal_margin"
    Android:paddingRight="@dimen/activity_horizontal_margin"
    Android:paddingTop="@dimen/activity_vertical_margin"
    Android:background="@drawable/splash"
    tools:context=".MainActivity" >

</RelativeLayout>
19
Somnath Pal

En règle générale, les écrans de démarrage ne sont pas recommandés pour une application, mais si vous en avez vraiment besoin. 

Android chargera une mise en page vierge avant le chargement, en fonction du thème que vous avez défini. La solution est le thème de l’activité splash à un transparent.

Créer un thème transparent dans res/values/styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="Theme.Transparent" parent="Android:Theme">
      <item name="Android:windowIsTranslucent">true</item>
      <item name="Android:windowBackground">@Android:color/transparent</item>
      <item name="Android:windowContentOverlay">@null</item>
      <item name="Android:windowNoTitle">true</item>
      <item name="Android:windowIsFloating">true</item>
     <item name="Android:backgroundDimEnabled">false</item>
  </style>
</resources>

Puis définissez le thème dans votre manifeste

<activity Android:name=".SplashActivity" Android:theme="@style/Theme.Transparent">
...
</activity>
22
Eoin

Il est préférable d'utiliser un Fond thématique pour votre activité de départ, mais si vous ne souhaitez pas que l'écran vide apparaisse avant le lancement de l'activité principale, vous pouvez définir votre activité comme suit:

Ajoutez Android:windowDisablePreview à votre AppTheme in res/values ​​/ styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <style name="AppTheme" parent="Android:Theme">
        <item name="Android:windowDisablePreview">true</item>
  </style>
</resources>

Puis définissez votre thème d'activité dans votre manifeste:

<activity Android:name=".MainActivity" Android:theme="@style/AppTheme">
...
</activity>

P.S: Le réglage de Android:windowDisablePreview n’a aucun effet sur l’arrière-plan de votre activité, vous n’avez donc rien à craindre.

10
Keivan Esbati

Il suffit de mentionner le thème transparent à l’activité de démarrage dans le fichier AndroidManifest.xml.

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

Le problème que vous rencontrez ici s'appelle «démarrage à froid» et correspond au temps principalement consacré à votre méthode Application.onCreate, qui effectue généralement certaines initialisations et peut prendre plus de temps que vous le souhaitez. Vous pouvez lire ici la documentation officielle: https://developer.Android.com/topic/performance/launch-time.html

Si tel est le cas, définir le thème en mode translucide ou en désactivant l'aperçu, comme le suggèrent d'autres, ne résoudra apparemment qu'apparemment le problème, car en réalité, vous tenterez de lancer l'application et vous ne recevrez aucun retour sur le fait que vous avez appuyé sur l'application. icône. Vous verrez votre application commencer avec un délai, ce qui n'est pas une UX souhaitée.

Écran vide, noir ou blanc, cela dépend vraiment de l'attribut Android:windowBackground spécifié dans votre thème d'activité principal . Le mieux que vous puissiez faire, à part déplacer certaines des initialisations que vous effectuez probablement dans votre méthode Application.onCreate, est de marquer votre fenêtre d'aperçu avec un logo comme suggéré dans ce post:

https://plus.google.com/+AndroidDevelopers/posts/Z1Wwainpjhd

Vous pouvez aller plus loin et améliorer l'expérience utilisateur en animant l'image de votre logo dans un écran de démarrage, le cas échéant, ou en concevant la fenêtre d'aperçu de manière à pouvoir passer en douceur au contenu de votre activité principale, comme décrit ici:

http://saulmm.github.io/avoding-Android-cold-starts

La même question répond correctement ici: https://stackoverflow.com/a/40482549/7094200 et est décrite dans cet article de blog: https://www.bignerdranch.com/blog/splash-screens-the -La bonne façon/

5
raducoti

Vraiment! le lien ci-dessous fonctionne pour moi !!!!

https://cyrilmottier.com/2013/01/23/Android-app-launching-made-gorgeous/

écrivez le style séparé dans style.xml pour votre écran de démarrage afin que vous puissiez corréler l’écran.

En voici le style:

<style name="AppTheme.Splash" parent="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="Android:windowBackground">@drawable/splash_final</item>
    </style>
2
JoboFive

Ce sont des fonctionnalités Android. Vous pouvez changer la couleur de fond de votre écran vierge. Utiliser le style:

<resources>
<style name="Theme" parent="Android:style/Theme" />
<style name="Theme.MainTheme" parent="Theme">
<item name="Android:windowNoTitle">true</item>
<item name="Android:windowContentOverlay">@null</item>
<item name="Android:windowBackground">@drawable/background_drawable</item>
</style>
</resources>

puis utilisez-le dans manifest:

<application
    Android:name="@string/app_name"
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/Theme.MainTheme"
     >
2
Android Android

J'ai corrigé le mien simplement en mettant à jour les outils de construction dans Android Studio.

0
Brent

Je pense que cela est similaire à certaines réponses qui ont été postées ci-dessus. Je voudrais quand même recommander le guide Big Nerd Ranch suivant sur la manière de créer un écran de démarrage correctement car il est bien illustré et facile à suivre. Vous devriez vraiment y aller et le lire au lieu de continuer ci-dessous:) . https://www.bignerdranch.com/blog/splash-screens-the-right-way/

Mais en bref, cela suggère que, au démarrage de l'application, vous lancez une activité de démarrage initiale. Pour cette activité, créez un dessin XML (@drawable/background_splash). 

<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 créez ensuite un thème pour l’activité Splash et définissez le dessin que vous avez créé ci-dessus comme arrière-plan de la fenêtre.

<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="Android:windowBackground">@drawable/background_splash</item>
</style>

Et ensuite, dans le manifeste, vous indiquez à l'activité de démarrage d'utiliser le thème ci-dessus.

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

Enfin, dans votre activité Splash, implémentez la méthode onCreate comme ci-dessous (c'est tout le code dont vous avez besoin dans l'activité). Ceci lancera votre activité principale et finira l’activité splash:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    finish();
}
0
lejonl