2017-01-17 20 views
0

ich hinzugefügt Splash-Screen auf meine Bewerbung und mein Code sieht wie folgt:Splash Screen Activity

public class SplashActivity extends AppCompatActivity { 

    public static final int DELAY_MILLIS = 2000;//for testing i use 5 seconds 
    private Handler handler = null; 

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

     handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       Intent intent = new Intent(SplashActivity.this, CurrencyExchangeActivity.class); 
       startActivity(intent); 
       finish(); 
      } 
     }, DELAY_MILLIS); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     handler.removeCallbacksAndMessages(null); 
    } 
} 

Mein Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.vdovin.currencyratesapp"> 

    <uses-permission android:name="android.permission.INTERNET"/> 

    <application 
     android:name=".application.CurrencyApp" 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 

     <activity 
      android:name=".screens.splash.SplashActivity" 
      android:theme="@style/SplashTheme"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

     <activity android:name=".screens.main.CurrencyExchangeActivity"> 
     </activity> 
    </application> 
</manifest> 

Also habe ich mit dem nächsten Problem:

Wenn ich verstecken Sie meine App mit Home-Taste beim Laden Splash-Screen, dann, wenn ich App wieder öffnen, Splash-Screen-Aktivität nicht CurrencyExchangeActivity aufrufen. Ich verstehe, dass es erscheint, weil Methode onCreate() nur einmal aufgerufen, aber ich kann es nicht in onResume() setzen, denn wenn ich meine App wieder öffne, zeigt es mir den Splash-Screen wieder. Aber ich möchte CurrencyActivity, wie googles apps (Karten, Blätter usw.) zeigen

+0

Fügen Sie Ihre Manifest-Datei zu –

Antwort

0

Sie können nicht tun, nur weil Sie das Splash-Screen Bild als background von theme Ihrer Activity sind einstellen. Das ist ein Fensterlevel-Hintergrund, der unabhängig von Ihrer Navigation oder anderem angezeigt wird.

Wenn Sie den Begrüßungsbildschirm nur einmal in der App-Lebensdauer anzeigen möchten, müssen Sie ihn in not the right way eingeben und dieses Bild als Teil Ihres Layouts verwenden und dieses Layout mit setContentView aufblasen. Nun, wenn Sie wieder in der App kommen, werden Sie Ihre CurrencyExchangeActivity noch vor von splash activity anrufen und die nur einen schwarzen Fensterhintergrund anzeigen und direkt CurrencyExchangeActivity angezeigt werden.

Lassen Sie mich wissen, ob dies sinnvoll ist oder nicht. Ich kann mehr, wenn nötig,

+0

Glaubst du, dass Google es auch nicht richtig macht? – Vdovin

+0

@Vdovin Über welche Google App sprichst du? –

+0

Ja, so etwas wie Google Maps, Google Tabellen – Vdovin

0

Bitte versuchen Sie diesen Weg. Ich habe Ihren Code nicht getestet. Meine Herrschaft des Splash verwendet, wird wie unten sein:

public class SplashActivity extends Activity { 
private static final String TAG = SplashActivity.class.getSimpleName(); 
Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     loadNext(); 
    } 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 


    new Thread() { 
     @Override 
     public void run() { 
      try { 
       sleep(1000); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
      handler.sendEmptyMessage(1); 
     } 
    }.start(); 
} 


protected void loadNext() { 
    Intent intent = new Intent(this, NextActivity.class); 
    startActivity(intent); 
    finish(); 
} 
} 
+0

Danke für die Antwort, aber es ist nicht Arbeit für mich. Nach 5 Sekunden wird CurrencyActivity automatisch geöffnet. – Vdovin

+0

"Splash-Screen-Aktivität nicht CurrencyExchangeActivity aufrufen" Ich dachte, Sie haben ein Problem bei der Navigation zu currencyExchangeactivity –

+0

Nein, es nicht Währung Exchange-Aktivität aufrufen, weil Methode OnCreate nur einmal aufgerufen und ich Callbacks von Handler in OnStop entfernen, also wenn ich App wieder öffnen, Ich rufe onCreate nicht auf, aber ich habe geschrieben, warum ich Handler in onResume – Vdovin

0

Sie

setContentView(R.layout.splash);

dieses Add vergessen haben hinzuzufügen, es

+0

nicht setze ich es durch Schicht mache. https://www.bignerdranch.com/blog/splash-screens-the-right-way/ – Vdovin

0

arbeiten Vielleicht folgendes Sie könnten versuchen:

@Override 
protected void onResume() { 
    super.onResume(); 
    Intent intent = new Intent(this, CurrencyExchangeActivity.class); 
    startActivity(intent); 
    finish(); 
} 

Dies wird die Verzögerung beim erneuten Öffnen der App nach überspringen Drücken der Home-Taste.

+0

I ich App mit Home-Taste ausblenden und öffnen Sie es erneut. Ich sehe wieder Splash-Screen, aber ich möchte CurrencyActivity sehen – Vdovin

0

Ich verwende normalerweise eine PostDelayed Runnable.

import android.content.Intent; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v7.app.AppCompatActivity; 

public class MainActivity extends AppCompatActivity { 

    private Handler handler = new Handler(); 

    private Runnable runnable = new Runnable() { 
     @Override 
     public void run() { 
      Intent intent = new Intent(this, NextActivity.class); 
      startActivity(intent); 
      finish(); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // 5 sec 
     handler.postDelayed(runnable, 5000); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     // 5 sec 
     handler.removeCallbacks(runnable); 
    } 
} 
+0

Wenn ich App ausgeblendet, wenn Splash-Screen geladen und öffnen Sie es erneut, ich werde Splash-Bildschirm wieder sehen. So funktioniert es nicht für mich – Vdovin

+0

Sie haben dieses Problem nicht, wenn Sie in onResume() Post-Runnable ausführen. Der Fehler in Ihrem Code ist runable Run onCreate(). – mcatta

0

Ich möchte vorschlagen, den Splash-Screen-Mechanismus in der CurrencyActivity in Ihrem Fall zu halten. Hier ist der Pseudocode.

Ich habe im Code richtige Kommentare hinzugefügt. Bitte prüfe.

public class CurrencyActivity extends AppCompatActivity { 

    public static final int DELAY_MILLIS = 2000; //for testing i use 5 seconds 
    private Handler handler = null; 
    private boolean showSplash = true; // True by default 
    private ImageView splashImage; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.currency_activity); 

     // Get a image overlaying the other views in your currency layout 
     splashImage = (ImageView) findViewById(R.id.splash); 

     if(showSplash) showSplashScreen(); 
    } 

    @Override 
    protected void onStop() { 
     super.onStop(); 
     handler.removeCallbacksAndMessages(null); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 
     showSplash = false; // Set the variable to false when you take this in background 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     // Check if the variable is false and then set the visibility to GONE 
     if(!showSplash) splashImage.setVisibility(View.GONE); 
    } 

    private void showSplashScreen() { 
     handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       splashImage.setVisibility(View.GONE); 
       showSplash = false; 
      } 
     }, DELAY_MILLIS); 
    } 
} 
0

Versuchen Sie, diese out--

SplashScreenActivity-

public class SplashActivity extends AppCompatActivity { 

public static final int DELAY_MILLIS = 2000;//for testing i use 5 seconds 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_splash); 

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

}

Für manifest--

<?xml version="1.0" encoding="utf-8"?> 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <activity android:name=".SplashActivity"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

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




</application> 

i für diesen Code getestet, wenn Sie das Problem, dass, wenn die Taste Startbildschirm wird wieder angezeigt der Begrüßungsbildschirm gedrückt wird, dann wäre dies .... arbeiten