2016-05-26 12 views
0

Ich versuche eine App zu erstellen, die ein erstes Layout für 5 Sekunden zeigt und nachdem ich zum Indexlayout (Home) gegangen bin. Das erste Layout zeigt nur ein Logo und den Namen der App ...Codierung eines Startbildschirms

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    SystemClock.sleep(5000); 
    Intent i = new Intent(this, Home.class); 
    startActivity(i); 
} 

Wenn ich die SystemClock.sleep(5000); Intent i = new Intent(this, Home.class); startActivity(i); kommentieren, arbeitet App als ich erwartet hatte. Zeigen Sie das erste Layout, bleiben Sie in diesem Layout (natürlich starte ich nichts anderes: P). Aber, wenn ich sie entziehe, warte die Aktivität für 5 Sekunden ohne etwas anzuzeigen (leeres Layout).

Irgendwelche Ideen?

Danke Jungs.

+1

Verwenden Sie Handler. postDelayed –

+0

Es funktioniert. Danke –

+1

Es funktioniert hässlich. Warum brauchst du Handler? Benutze Views Warteschlange !!! –

Antwort

1

Um einen Begrüßungsbildschirm auf Ihrer App zeigen Sie eine nicht zeigen sollen Versuchen Sie, den Hauptthread für 5 Sekunden in den Ruhezustand zu versetzen und die App erneut zu aktivieren. Der "richtige" Weg (es gibt keine richtige Möglichkeit, einen Begrüßungsbildschirm anzuzeigen, da Begrüßungsbildschirme in mobilen Apps fast verboten sind), einen Begrüßungsbildschirm anzuzeigen, würde eine neue Aktivität oder ein neues Fragment erstellen, das diesen Bildschirm enthält und mit einem Handler.postDelayed Warten Sie in dieser Aktivität 5 Sekunden und zeigen Sie dann Ihre Hauptaktivität an.

Nützliche Informationen über Splash Screens:

https://www.bignerdranch.com/blog/splash-screens-the-right-way/

+0

Danke. Aber für meine Pfütze bevorzuge ich Petrov Wahl. Ich kann entscheiden, wie wenig Benutzer warten. Auch ich kann Animationen zeigen. Aber, nochmals vielen Dank, es wird in Zukunft nützlich sein ... –

1

Ich denke, Sie suchen etwas wie Splash Screen, die es für ein paar Sekunden zeigt und die Hauptaktivität beginnt?

Nun, als Sie so etwas wie dieses verwenden:

public class ActivitySplash extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.view_splash); 
    Firebase.setAndroidContext(this); 

    starter(); 
} 

//Thread for the timer with 3.5 secs. 
private void starter() 
{ 
    Thread timer = new Thread(){ 
     public void run(){ 
      try{ 
       //Sleep for 5 seconds. 
       sleep(5000); 
      } 
      catch(InterruptedException e){ 
       e.printStackTrace(); 
      } finally { 

       //Call and start the new Activity 
       Intent newActivity= new Intent(ActivitySplash.this, YOURACTIVITY.class); 
       startActivity(newActivity); 
       finish(); 
      } 
     } 
    }; 
    timer.start(); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    finish(); 
} 
} 

ein Logo im Layout zu zeigen, machen nur eine xml mit einem Logo in der Mitte mit Namen, den Sie eingeben möchten. hier ist diejenige, die ich verwende:

<?xml version="1.0" encoding="utf-8"?> 
<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" 
    tools:context=".ActivitySplash"> 

    <ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/imageView" 
    android:src="@mipmap/ic_launcher" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentBottom="true" /> 
</RelativeLayout> 
1

auf diese Weise versuchen ..

new Handler().postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       Intent i = new Intent(MainActivity.this, Home.class); 
       startActivity(i); 
      } 
     }, 5000); 

statt, wenn

SystemClock.sleep(5000); 
+0

Nun, Sie brauchen Handler dafür nicht. –

+0

Danke vrund. Es klappt.Ich brauchte nur ändern: Absicht i = neue Absicht (MainActivity.this, Home.class); startAktivität (i); –

+0

froh, das zu hören .. Akzeptieren Sie, wenn Sie es richtig beantworten. –

1

Erstellen Sie keine Handler und Verknüpfungen, die nicht notwendig sind! Ihre Aufgabe könnte auf diese Weise geschehen:

getWindow().getDecorView().postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       //start activity here 
      } 
     }, 500); 

nicht mehr Müll für Ihre Garbage Collector erstellen.

Obwohl Sie ActivityTransitions erwähnen sollten. Es, wonach Sie wirklich suchen? Wenn nicht, könnten Sie einfach zu Ihrer Layout-Splash-Ansicht hinzufügen, die alle Inhalte überlagert, und Sie könnten benutzerdefinierte Animationen in dieser Splash-Ansicht wiedergeben. Zum Beispiel:

getWindow().getDecorView().postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      // splash would disappear after 400 ms 
      mSplashView.animate().alpha(0).setDuration(400).start(); 
     } 
    }, 500); 
+0

Es funktioniert auch. Und ich mag deinen Ansatz. Vermeiden Sie Müll zu schaffen ... Danke Petrov –

2

Erzwingen Sie keine Wartezeit in Ihren Apps, um einen Begrüßungsbildschirm anzuzeigen, Sie verschwenden Benutzerzeit. Um einen Begrüßungsbildschirm auf die richtige Art und Weise zu erstellen, können Sie die Option windowBackground aus Ihrem App-Design verwenden. Hier ein Beispiel: https://www.bignerdranch.com/blog/splash-screens-the-right-way/

+0

Danke. Aber für meine Pfütze bevorzuge ich Petrov Wahl. Ich kann entscheiden, wie wenig Benutzer warten. Auch ich kann Animationen zeigen. Aber, nochmals danke, es wird in Zukunft nützlich sein ... –