为什么Android 9.0中webview中的进度条显示有延迟?

Ear*_*rey 5 java android android-webview android-9.0-pie

我是 Android 新手,正在开发一个包含片段的应用程序。其中一个片段包含一个WebView. 我正在使用 a,ProgressBar正如许多 webview 教程中提到的那样,以便在页面加载时有一个加载动画。

问题是,当我运行应用程序并加载页面WebView(无论是外部设备还是模拟器)时,进度条会出现一小段延迟(大约 2 秒),而不是在按下链接后立即出现。仅在新页面开始加载之前不久,它才会短暂出现,并在页面加载时根据需要再次消失。

我已经测试了几个 Android 版本,除了 Android 9.0 之外,它在所有版本上都运行良好

这是我WebViewClient正在使用的课程webView

private class MyWebviewClient extends WebViewClient {

        @Override
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            webProgress.setVisibility(View.VISIBLE);
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            webProgress.setVisibility(View.GONE);
        }

    }
Run Code Online (Sandbox Code Playgroud)

这是我的 xml 布局文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_centerInParent="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />


</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

我只是不明白我做错了什么。

Ear*_*rey 5

我自己找到了答案。我必须覆盖 shouldOverrideUrlLoading() 而不是 onPageStarted(),以便在单击链接后立即显示 ProgressBar,而不是稍后显示。

private class MyWebviewClient extends WebViewClient {

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            webProgress.setVisibility(View.VISIBLE);
            return super.shouldOverrideUrlLoading(view, url);
    }

        @Override
        public void onPageFinished(WebView view, String url) {
            webProgress.setVisibility(View.GONE);
        }

}
Run Code Online (Sandbox Code Playgroud)