619 Stimmen

Wie erstelle ich einen Begrüßungsbildschirm?

Ich möchte, dass meine Anwendung professioneller aussieht, also habe ich beschlossen, einen Splash-Screen hinzuzufügen.

Wie sollte ich bei der Umsetzung vorgehen?

1voto

Agilanbu Punkte 2585

Seine wirklich einfach in Android verwenden wir nur Handler-Konzept, um den Splash-Screen zu implementieren

In Ihrem SplashScreenActivity java-Datei diesen Code einfügen.

In Ihrem SplashScreenActivity xml-Datei ein beliebiges Bild mit imageview einfügen.

public void LoadScreen() {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {                 
                Intent i = new Intent(SplashScreenActivity.this, AgilanbuGameOptionsActivity.class);
                startActivity(i);
            }
        }, 2000);
    }

1voto

ClassA Punkte 2030

In meinem Fall wollte ich nicht eine neue Aktivität erstellen, nur um ein Bild für 2 Sekunden anzuzeigen. Beim Starten meiner MainAvtivity Ich weiß, dass das Laden etwa 1 Sekunde dauert, also habe ich beschlossen, innerhalb meiner MainActivity Folgendes zu tun OnCreate :

splashImage = (ImageView) findViewById(R.id.spllll);

    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);

    int secondsDelayed = 1;
    new Handler().postDelayed(new Runnable() {
        public void run() {
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
            splashImage.setVisibility(View.GONE);

        }
    }, secondsDelayed * 2000);

Beim Starten der Anwendung wird als erstes die ImageView wird angezeigt und die Statusleiste wird entfernt, indem die Fensterflags auf Vollbild gesetzt werden. Dann habe ich eine Handler für 2 Sekunden laufen lassen. Nach den 2 Sekunden lösche ich die Vollbild-Flags und setze die Sichtbarkeit der ImageView a GONE . Leicht, einfach, effektiv.

1voto

w3bshark Punkte 2639

Dies ist der beste Beitrag, den ich über Splash Screens gesehen habe: http://saulmm.github.io/avoding-Android-cold-starts

Saúl Molinero geht auf zwei verschiedene Optionen für Splash Screens ein: Die Nutzung des Fensterhintergrunds, um den Startbildschirm zu animieren, und die Anzeige von Platzhalter-UI (eine beliebte Wahl, die Google heutzutage für die meisten seiner Apps verwendet).

Ich beziehe mich jedes Mal auf diesen Beitrag, wenn ich mich mit der Kaltstartzeit und der Vermeidung von Benutzerverlusten aufgrund langer Startzeiten befassen muss.

Ich hoffe, das hilft!

1voto

JAAD Punkte 12289

Obwohl es gute Antworten gibt, werde ich den von Google empfohlenen Weg aufzeigen:

1) Erstellen Sie zunächst eine Theme für den Begrüßungsbildschirm: Sie haben ein Thema namens splashscreenTheme wäre Ihr Launcher-Thema:

<style name="splashscreenTheme">
  <item name="android:windowBackground">@drawable/launch_screen</item>
</style>

Nota:

android:windowBackground setzt bereits Ihr Splashscreen-Bild nein
Sie müssen dies in der Benutzeroberfläche erneut tun.

Sie können hier auch Farbe anstelle eines drawable verwenden.

2) Setzen Sie das Thema auf das Manifest von splashscreenActivity

   <activity
            android:name=".activity.splashscreenActivity"
            android:screenOrientation="portrait"
            android:theme="@style/splashscreenTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

3) Stellen Sie sicher, dass Sie launch_screen drawable ist nicht in drawable Ordner, wenn Ihr Bild nicht klein ist.

Dies führt zu einem schnelleren Start des Bildschirms und bewahrt Sie vor einem schwarzen Bildschirm.

Es vermeidet auch zusätzliche Überziehungen

1voto

Joel Teply Punkte 3141

Wie wäre es mit einem superflexiblen Startbildschirm, der den gleichen Code verwenden kann und in der AndroidManifest.xml definiert ist, so dass der Code nie geändert werden muss. Ich entwickle im Allgemeinen Code-Bibliotheken und mag es nicht, Code anzupassen, weil das schlampig ist.

<activity
        android:name=".SplashActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <meta-data android:name="launch_class" android:value="com.mypackage.MyFirstActivity" />
        <meta-data android:name="duration" android:value="5000" />
</activity>

Dann schaut die SpashActivity selbst in den Metadaten für "launch_class" nach, um dann den Intent selbst zu erstellen. Die Metadaten "duration" definieren, wie lange der Splash-Screen angezeigt wird.

public class SplashActivity extends Activity {

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_splash);

    ComponentName componentName = new ComponentName(this, this.getClass());

    try {
        Bundle bundle = null;
        bundle = getPackageManager().getActivityInfo(componentName, PackageManager.GET_META_DATA).metaData;
        String launch_class = bundle.getString("launch_class");
        //default of 2 seconds, otherwise defined in manifest
        int duration = bundle.getInt("duration", 2000);

        if(launch_class != null) {
            try {
                final Class<?> c = Class.forName(launch_class);

                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        Intent intent = new Intent(SplashActivity.this, c);
                        startActivity(intent);
                        finish();
                    }
                }, duration);

            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X