简体   繁体   English

在 onPageFinished 后等待几秒钟

[英]Wait few seconds after onPageFinished

i have developed a Webview App.我开发了一个 Webview 应用程序。 While loading WebView, an Splash Screen as "Progressbar" is shown.加载 WebView 时,会显示作为“进度条”的启动画面。 But I see the Splash Screen only 1 seconds because the Splashscreen are hidden after successful load of webview.但我只看到启动画面 1 秒,因为成功加载 webview 后启动画面被隐藏。 The loading is very fast but i want to see the splash screen for 3 seconds.加载速度非常快,但我想看到启动画面 3 秒。 How can I implement it in a way that the splashscreen is shown for min 3 seconds?如何以显示启动画面至少 3 秒的方式实现它?

MainActivity:主要活动:


public class MainActivity extends AppCompatActivity {

    String ShowOrHideWebViewInitialUse = "show";
    private WebView webview ;
    private ImageView spinner;

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

        webview =(WebView)findViewById(R.id.webView);
        spinner = (ImageView)findViewById(R.id.logo_id3);
        webview.setWebViewClient(new CustomWebViewClient());

        webview.getSettings().setJavaScriptEnabled(true);
        webview.getSettings().setDomStorageEnabled(true);
        webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
        webview.loadUrl("xxxxxxxxxx");

    }
    boolean doubleBackToExitPressedOnce = false;

    @Override
    public void onBackPressed() {
        if (webview.canGoBack()){
            webview.goBack();
            Toast.makeText( this, "Going back inside a WebView", Toast.LENGTH_SHORT).show();
        }else {
            this.doubleBackToExitPressedOnce = true;
            Toast.makeText(this, "Doppelt zurück um zu beenden", Toast.LENGTH_SHORT).show();
        }

            if (doubleBackToExitPressedOnce) {
            super.onBackPressed();
            return;
        }



        new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
            @Override
            public void run() {
                // Your Code
                doubleBackToExitPressedOnce=false;
            }
        }, 2000);
    }

    // This allows for a splash screen
    // (and hide elements once the page loads)
    private class CustomWebViewClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView webview, String url, Bitmap favicon) {

            // only make it invisible the FIRST time the app is run
            if (ShowOrHideWebViewInitialUse.equals("show")) {
                webview.setVisibility(webview.INVISIBLE);
            }
        }

        @Override
        public void onPageFinished(WebView view, String url) {

            ShowOrHideWebViewInitialUse = "hide";
            spinner.setVisibility(View.GONE);

            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);

        }
    }
}
mWebView.setWebViewClient(new WebViewClient() {

   public void onPageFinished(WebView view, String url) {
        // Hide the splash here 
    }
}); 

In your case, you can delay your code this way:在您的情况下,您可以通过以下方式延迟您的代码:

public void onPageFinished(WebView view, String url) {

    Thread.sleep(2000);

    ShowOrHideWebViewInitialUse = "hide";
    spinner.setVisibility(View.GONE);

    view.setVisibility(webview.VISIBLE);
    super.onPageFinished(view, url);

}

The unit for 2000 is milliseconds. 2000的单位是毫秒。 So this will pause the thread for 2 seconds and then continue所以这将暂停线程2秒然后继续

Or use the handler class like so:或者像这样使用处理程序 class :

public void onPageFinished(WebView view, String url) {

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

        @Override
        public void run() {
            ShowOrHideWebViewInitialUse = "hide";
            spinner.setVisibility(View.GONE);

            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);

        }
    }, 2000);
}

You can use a Handler with postDelayed您可以使用带有postDelayed的处理程序

Here the code in postDelayed will execute after 3 seconds from calling onPageFinished这里postDelayed中的代码将在调用onPageFinished 3 秒后执行

@Override
public void onPageFinished(WebView view, String url) {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            ShowOrHideWebViewInitialUse = "hide";
            spinner.setVisibility(View.GONE);

            view.setVisibility(webview.VISIBLE);
            super.onPageFinished(view, url);

        }
    }, 3000); // 3 seconds (3000 millisec)
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM