如何更正我的Web应用程序启动画面代码以首先显示启动画面然后转到主要活动?

时间:2017-12-25 08:22:27

标签: android splash-screen

我正在尝试为我的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>

我的主要活动文件

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

2 个答案:

答案 0 :(得分:1)

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

  1. 将启动画面设为HTML文件(放置在应用中的资源文件夹中)并加载myWebview.loadURL()(加载速度非常快)

  2. 在启动画面HTML的底部,将Javascript重定向添加到默认加载网址(显示为http://in10me.com/)。

  3. 这样做的好处是巨大的!用户只需等待连接,无论速度有多慢或多快。

    删除无意义的4秒超时。

    启动画面的初始加载时间非常快。

    启动画面会一直存在,直到真正的URL准备好呈现,看起来效果更好。

    代码少得多:]

答案 1 :(得分:0)

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