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?
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);
}
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.
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!
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
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 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.