Ich möchte, dass meine Anwendung professioneller aussieht, also habe ich beschlossen, einen Splash-Screen hinzuzufügen.
Wie sollte ich bei der Umsetzung vorgehen?
Ich möchte, dass meine Anwendung professioneller aussieht, also habe ich beschlossen, einen Splash-Screen hinzuzufügen.
Wie sollte ich bei der Umsetzung vorgehen?
Beachten Sie, dass diese Lösung den Benutzer nicht länger warten lässt: die Verzögerung des Splash-Screens hängt von der Startzeit der Anwendung ab.
Wenn Sie eine beliebige Android-App öffnen, erhalten Sie standardmäßig einen schwarzen Bildschirm mit dem Titel und dem Symbol der App im oberen Bereich. Sie können dies durch die Verwendung eines Stils/Themas ändern.
Erstellen Sie zunächst eine style.xml im Ordner values und fügen Sie ihr einen Stil hinzu.
<style name="splashScreenTheme" parent="@android:style/Theme.DeviceDefault.Light.NoActionBar">
<item name="android:windowBackground">@drawable/splash_screen</item>
</style>
Anstelle der Verwendung von @android:style/Theme.DeviceDefault.Light.NoActionBar
können Sie jedes andere Thema als übergeordnetes Thema verwenden.
Zweitens, fügen Sie in Ihrer App Manifest.xml hinzu android:theme="@style/splashScreenTheme"
zu Ihrer Haupttätigkeit.
<activity
android:name="MainActivity"
android:label="@string/app_name"
android:theme="@style/splashScreenTheme" >
Drittens: Aktualisieren Sie Ihr Thema in Ihrer onCreate()-Startaktivität.
protected void onCreate(Bundle savedInstanceState) {
// Make sure this is before calling super.onCreate
setTheme(R.style.mainAppTheme);
super.onCreate(savedInstanceState);
}
UPDATE Überprüfen Sie 本論文 .
Dank an @mat1h und @adelriosantiago
Lesen Sie weiter:
Alte Antwort:
ANLEITUNG : Einfacher Begrüßungsbildschirm
Diese Antwort zeigt Ihnen, wie Sie einen Startbildschirm für eine bestimmte Zeit anzeigen können, wenn Ihre App startet, z. B. aus Gründen des Brandings. Sie können z. B. den Startbildschirm 3 Sekunden lang anzeigen lassen. Wenn Sie den Startbildschirm jedoch für eine variable Zeitspanne anzeigen möchten (z. B. die Startzeit der App), sollten Sie sich die Antwort von Abdullah ansehen https://stackoverflow.com/a/15832037/401025 . Seien Sie sich jedoch bewusst, dass der Start der App auf neuen Geräten sehr schnell sein kann, so dass der Benutzer nur einen Blitz sieht, was eine schlechte UX ist.
Zuerst müssen Sie den Spash-Screen in Ihrem layout.xml
Datei
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView android:id="@+id/splashscreen" android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:src="@drawable/splash"
android:layout_gravity="center"/>
<TextView android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, splash"/>
</LinearLayout>
Und Ihre Aktivität:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class Splash extends Activity {
/** Duration of wait **/
private final int SPLASH_DISPLAY_LENGTH = 1000;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.splashscreen);
/* New Handler to start the Menu-Activity
* and close this Splash-Screen after some seconds.*/
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
/* Create an Intent that will start the Menu-Activity. */
Intent mainIntent = new Intent(Splash.this,Menu.class);
Splash.this.startActivity(mainIntent);
Splash.this.finish();
}
}, SPLASH_DISPLAY_LENGTH);
}
}
Das ist alles ;)
Erstellen Sie eine Aktivität: Splash
Erstellen Sie eine Layout-XML-Datei: splash.xml
Fügen Sie UI-Komponenten in das splash.xml-Layout ein, damit es wie gewünscht aussieht
könnte Ihr Splash.java wie folgt aussehen:
public class Splash extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
int secondsDelayed = 1;
new Handler().postDelayed(new Runnable() {
public void run() {
startActivity(new Intent(Splash.this, ActivityB.class));
finish();
}
}, secondsDelayed * 1000);
}
}
ändern ActivityB.class
zu der Aktivität, die Sie nach dem Startbildschirm beginnen möchten
Überprüfen Sie Ihre Manifestdatei und sie sollte wie folgt aussehen
<activity android:name=".HomeScreen" android:label="@string/app_name"> </activity> <activity android:name=".Splash" android:label="@string/title_activity_splash_screen"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
Die obigen Antworten sind sehr gut, aber ich möchte noch etwas hinzufügen. Ich bin neu in Android, traf ich diese Problem während meiner Entwicklung. hoffen, dass dies jemand wie mich helfen kann.
Der Splash-Screen ist der Einstiegspunkt meiner App, also fügen Sie die folgenden Zeilen in AndroidManifest.xml ein.
<activity
android:name=".SplashActivity"
android:theme="@android:style/Theme.DeviceDefault.Light.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Der Begrüßungsbildschirm sollte nur einmal im Lebenszyklus der Anwendung angezeigt werden. Ich verwende eine boolesche Variable, um den Zustand des Begrüßungsbildschirms aufzuzeichnen, und zeige ihn nur beim ersten Mal.
public class SplashActivity extends Activity {
private static boolean splashLoaded = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (!splashLoaded) {
setContentView(R.layout.activity_splash);
int secondsDelayed = 1;
new Handler().postDelayed(new Runnable() {
public void run() {
startActivity(new Intent(SplashActivity.this, MainActivity.class));
finish();
}
}, secondsDelayed * 500);
splashLoaded = true;
}
else {
Intent goToMainActivity = new Intent(SplashActivity.this, MainActivity.class);
goToMainActivity.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(goToMainActivity);
finish();
}
}
}
Viel Spaß beim Codieren!
Die Antwort von Abdullah ist großartig. Aber ich möchte sie mit meiner Antwort noch um einige Details ergänzen.
Implementierung eines Splash-Screens
Einen Splash-Screen richtig zu implementieren ist etwas anders, als Sie vielleicht denken. Die Splash-Ansicht, die Sie sehen, muss sofort fertig sein, noch bevor Sie eine Layout-Datei in Ihrer Splash-Aktivität aufblasen können.
Sie werden also keine Layout-Datei verwenden. Stattdessen geben Sie den Hintergrund des Startbildschirms als Themenhintergrund der Aktivität an. Dazu erstellen Sie zunächst ein XML-Drawable in res/drawable.
hintergrund_splash.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Background Color -->
<item
android:drawable="@color/gray"/>
<!-- Logo -->
<item>
<bitmap
android:gravity="center"
android:src="@mipmap/ic_launcher"/>
</item>
</layer-list>
Es ist nur eine Ebenenliste mit dem Logo in der Mitte und der Hintergrundfarbe.
Öffnen Sie nun die Datei styles.xml und fügen Sie diesen Stil hinzu
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="android:windowBackground">@drawable/background_splash</item>
</style>
Dieses Thema wird keine Aktionsleiste haben und mit dem Hintergrund, den wir gerade oben erstellt haben.
Und im Manifest müssen Sie SplashTheme auf die Aktivität setzen, die Sie als Splash verwenden möchten.
<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>
Dann navigieren Sie den Benutzer innerhalb Ihres Aktivitätscodes nach dem Splash mit Hilfe der Absicht zu einem bestimmten Bildschirm.
public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
}
}
Das ist der richtige Weg. Ich habe diese Referenzen für die Antwort verwendet.
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.