为什么在 Android 9.0 中 Webview 中的进度条显示有延迟?
Why is the progress bar in a webview displayed with a delay in Android 9.0?
我是 android 的新手,我正在开发一个包含片段的应用程序。其中一个片段包含 WebView
。我正在使用 ProgressBar
,因为它在许多 webview 教程中都提到过,以便在页面加载时有一个加载动画。
问题是,当我 运行 应用程序并在 WebView
中加载页面时(无论是外部设备还是模拟器),进度条会出现一个小延迟(大约 2 秒),而不是紧接着例如按 link。仅在新页面开始加载前不久,它会短暂出现并在加载页面时根据需要再次消失。
我已经测试了几个 android 版本,除了 Android 9.0
之外,它在所有版本上都运行良好
这是我的 WebViewClient
class 用于我的 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);
}
}
这是我的 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>
我只是不知道我做错了什么。
我自己找到了答案。我不得不覆盖 shouldOverrideUrlLoading() 而不是 onPageStarted() 以便 ProgressBar 在单击 link 之后立即显示,而不是稍后显示。
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);
}
}
我发现旧版本 Webview 和新版本 Webview 之间的行为发生了变化。
旧版本 Webview 在第一步时调用 onPageStart,但较新版本(我在 74 上测试)在 "Waiting" 步骤时调用 onPageStart。
因此将代码更改为 OnProgressChanged
以解决此问题。
我是 android 的新手,我正在开发一个包含片段的应用程序。其中一个片段包含 WebView
。我正在使用 ProgressBar
,因为它在许多 webview 教程中都提到过,以便在页面加载时有一个加载动画。
问题是,当我 运行 应用程序并在 WebView
中加载页面时(无论是外部设备还是模拟器),进度条会出现一个小延迟(大约 2 秒),而不是紧接着例如按 link。仅在新页面开始加载前不久,它会短暂出现并在加载页面时根据需要再次消失。
我已经测试了几个 android 版本,除了 Android 9.0
之外,它在所有版本上都运行良好这是我的 WebViewClient
class 用于我的 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);
}
}
这是我的 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>
我只是不知道我做错了什么。
我自己找到了答案。我不得不覆盖 shouldOverrideUrlLoading() 而不是 onPageStarted() 以便 ProgressBar 在单击 link 之后立即显示,而不是稍后显示。
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);
}
}
我发现旧版本 Webview 和新版本 Webview 之间的行为发生了变化。
旧版本 Webview 在第一步时调用 onPageStart,但较新版本(我在 74 上测试)在 "Waiting" 步骤时调用 onPageStart。
因此将代码更改为 OnProgressChanged
以解决此问题。