2017-12-25 19 views
0

Ich versuche eine SplashScreen für meine Android Webapp zu implementieren. Allerdings, wenn ich die App laufen, kommt die SplashScreen eher nach dem MainActivity Bildschirm, der das Gegenteil von dem ist, was ich erreichen möchte. Ich habe einige Male auf Youtube und Stackoverflow recherchiert, aber es scheint, dass die meisten der Fragen, die ich stieß, den Individuen eigen sind. Das ist mein Code unten. Bitte brauchen Sie Hilfe, um es zu beheben.Wie korrigiere ich den Startbildschirm meines Web App-Begrüßungsbildschirms, um zuerst den Begrüßungsbildschirm anzuzeigen und dann zur Hauptaktivität zu wechseln?

Mein Manifest Datei

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

     <uses-permission android:name="android.permission.INTERNET" /> 
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
     android:hardwareAccelerated = "true" 
     <application 
      android:allowBackup="true" 
      android:icon="@mipmap/ic_launcher" 
      android:label="@string/app_name" 
      android:roundIcon="@mipmap/ic_launcher_round" 
      android:supportsRtl="true" 
      android:theme="@style/AppTheme"> 
      <activity android:name=".MainActivity"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 

        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 
      <activity android:name="com.in10me.HomeActivity"></activity> 
     </application> 

    </manifest> 

Mein MainActivity Datei

package com.in10me.jeremy.in10me; 

    import android.content.Intent; 
    import android.os.Bundle; 
    import android.os.Handler; 
    import android.support.v4.widget.SwipeRefreshLayout; 
    import android.support.v7.app.AppCompatActivity; 
    import android.view.View; 
    import android.webkit.WebSettings; 
    import android.webkit.WebView; 
    import android.webkit.WebViewClient; 

    import com.in10me.HomeActivity; 

    public class MainActivity extends AppCompatActivity { 
     //splash screen time out 
     private static int SPLASH_TIME_OUT = 4000; 

     WebView myWebview; 
     SwipeRefreshLayout swipe; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 

      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run(){ 
        Intent homeIntent = new Intent(MainActivity.this, HomeActivity.class); 
        startActivity(homeIntent); 
        finish(); 
       } 
     }, SPLASH_TIME_OUT); 

      swipe = (SwipeRefreshLayout) findViewById(R.id.swipe); 
      swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { 
       @Override 
       public void onRefresh() { 
        LoadWeb(); 
       } 
      }); 

      LoadWeb(); 

     } 

     public void LoadWeb() { 

      myWebview = (WebView) findViewById(R.id.myWebview); 
      WebSettings webSettings = myWebview.getSettings(); 
      webSettings.setJavaScriptEnabled(true); 
      myWebview.setFocusable(true); 
      myWebview.setFocusableInTouchMode(true); 
      myWebview.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); 

      //Improve app intern loading response time performance 
      myWebview.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH); 
      myWebview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); 
      myWebview.getSettings().setAppCacheEnabled(true); 
      myWebview.getSettings().setDomStorageEnabled(true); 
      webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS); 
      webSettings.setUseWideViewPort(true); 
      webSettings.setSavePassword(true); 
      webSettings.setSaveFormData(true); 
      webSettings.setEnableSmoothTransition(true); 

      //Webview here 
      myWebview.loadUrl("http://in10me.com"); 
      swipe.setRefreshing(true); 
      myWebview.setWebViewClient(new WebViewClient() { 

       public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
        myWebview.loadUrl("file:///android_asset/error.html"); 
       } 

       public void onPageFinished(WebView view, String url){ 
        //Hide Swipe 
        swipe.setRefreshing(false); 
       } 
      }); 

      } 

     @Override 
     public void onBackPressed(){ 
      if (myWebview.canGoBack()) { 
       myWebview.goBack(); 
      } else { 
       super.onBackPressed(); 
      } 
     } 
    } 
+0

jetzt wartet es ist nicht für Webansicht das Laden zu beenden ist es nur zu Hause zu bekommen. –

Antwort

0

Sie Handler nach Web-Seite zu laden Finish beginnen sollte, warten Sie es dann für die Spielpläne Webseite anzuzeigen Timeout und Navigieren Sie dann zu HomeActivity.

myWebview.setWebViewClient(new WebViewClient() { 

      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       myWebview.loadUrl("file:///android_asset/error.html"); 
      } 

      public void onPageFinished(WebView view, String url){ 
       //Hide Swipe 
       swipe.setRefreshing(false); 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run(){ 
         Intent homeIntent = new Intent(MainActivity.this, HomeActivity.class); 
         startActivity(homeIntent); 
         finish(); 
       } 
      }, SPLASH_TIME_OUT); 
     } 
    }); 
} 
+0

Vielen Dank, so schwierig, dass ich das vorher nicht gesehen habe! Vielen Dank! – Jach

1

Eine bessere, raschere und weniger ärgerlich Methode wäre die folgende Struktur:

  1. Machen Sie Ihren Splash-Screen eine HTML-Datei (in Ihrem Vermögen Ordnern in der App platziert) und Last mit myWebview.loadURL() (sehr schnell zu laden)

  2. Am unteren Rand des Begrüßungsbildschirms HTML, fügen Sie eine Javascript-Umleitung zu Standard-Lade-URL (scheint http://in10me.com/).

Vorteile davon sind riesig! Der Benutzer wartet nur, bis die Verbindung hergestellt ist, egal wie langsam oder schnell es dauert.

Entfernt die sinnlose 4-Sekunden-Zeitüberschreitung.

Die anfängliche Ladezeit für den Begrüßungsbildschirm ist sehr schnell.

Der Begrüßungsbildschirm bleibt so lange hängen, bis die echte URL bereit ist, gerendert zu werden, was besser aussieht und funktioniert.

Viel weniger Code zu:]

+0

Brilliant Ansatz! Danke vielmals. Ich werde es so schnell wie möglich versuchen und Feedback geben. Danke noch einmal! – Jach

Verwandte Themen