如何更正我的Web应用程序Splash屏幕代码以首先显示Splash屏幕,然后移至主要活动



我正在尝试为我的Android WebApp实现SplashScreen。但是,当我运行该应用程序时,SplashScreen而不是在MainActivity屏幕之后,这是我要完成的目标。我已经在YouTube和Stackoverflow上进行了几次研究,但似乎我遇到的大多数问题都是个人奇怪的。这是我下面的代码。请需要帮助来解决它。

我的清单文件

 <?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>

我的主动file

    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();
            }
        }
    }

更好,快速且烦人的方法将是以下结构:

  1. 使您的飞溅屏幕一个HTML文件(放置在应用程序中的资产文件夹中),并加载myWebview.loadURL()(非常快到加载)

  2. 在飞溅屏幕HTML的底部,将JavaScript重定向添加到默认加载URL(似乎是http://in10me.com/)。

这是巨大的优势!用户只等到连接进行连接,无论其采取多么速度或快速。

删除毫无意义的4秒超时。

飞溅屏幕的初始加载时间很快。

飞溅屏幕将悬而未决,直到真正的URL已准备好渲染为止,看起来和效果更好。

也少得多的代码:]

您应该在网页加载完成后启动处理程序,然后它将等待时间表超时显示网页,然后导航到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);
        }
     });
}

相关内容

  • 没有找到相关文章

最新更新