android - Android Studio中WebView内部链接的进度条
问题描述
我有一个用 Android Studio 开发的 WebView。我想实现一个进度条出现在 WebView 的每个内部页面上。
我给你看代码。虽然我必须澄清一下,该应用程序已经有一个进度条,它完成了启动画面的功能。
我想要的是,当在 WebView 中打开一个链接时,会出现一个进度条,指示页面正在加载,因为当打开一个链接时,用户的屏幕会瘫痪几秒钟,直到它完全加载,这对裸体来说可能很烦人眼睛。
初步代码:
主要活动
package com.example.app;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.graphics.Bitmap;
import android.view.View;
import android.widget.ProgressBar;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
String ShowOrHideWebViewInitialUse = "show";
private ProgressBar spinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webview = (WebView) findViewById(R.id.webView);
spinner = (ProgressBar) findViewById(R.id.progressBar1);
webview.setWebViewClient(new CustomWebViewClient());
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
webview.loadUrl("https://www.example.com");
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
WebView miVisorWeb;
miVisorWeb = (WebView) findViewById(R.id.webView);
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (miVisorWeb.canGoBack()) {
miVisorWeb.goBack();
} else {
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
private class CustomWebViewClient extends WebViewClient {
@Override
public void onPageStarted(WebView webview, String url, Bitmap favicon) {
if (ShowOrHideWebViewInitialUse.equals("show")) {
webview.setVisibility(View.INVISIBLE);
}
}
@Override
public void onPageFinished(WebView view, String url) {
ShowOrHideWebViewInitialUse = "hide";
spinner.setVisibility(View.GONE);
view.setVisibility(View.VISIBLE);
super.onPageFinished(view, url);
}
}
}
如果您可以实现另一个不填满整个屏幕的进度条,这将是一个很大的帮助,它在加载 WebView 中的链接时显示,然后在加载完成时消失。
非常感谢你!
解决方案
代替 Spinner 进度条,您可以通过更改样式来使用水平条。
<ProgressBar
style="?android:attr/progressBarStyleHorizontal"
--- other attributes here ---
/>
将此水平进度条放置在 webview 的顶部,类似于下图。
此外,通过设置chromeWebClient
webview 和覆盖onProgressChanged
方法,我们可以获得页面加载的进度,可以设置为水平进度条。
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int newProgress) {
progressBar.setProgressCompat(newProgress, true)
}
});
推荐阅读
- copy - 如何将文件从 SFTP 复制到基于源文件名(Blob 存储)动态创建的目标文件夹?
- virtualbox - 当侦听器设置为主机 IP 地址时,与 Oracle DB 19c 的连接失败
- css - 如何将 Ultimate Member 与 buddyboss 和 anspress 集成
- flutter - 无法从另一个包调用 Flutter Singleton
- javascript - 即使在使用 JavaScript 更改事件侦听器后,附加 HTML 元素的函数也不起作用
- r - 使用 ifelse 更改输出它不应该改变
- flutter - Flutter Windows:如果将 TextField 放置在 AlertDialog 内,则它不允许空间
- django - 如何组合我的 Django 模型,以免重复自己?
- sql-server - 如何将 sql 查询的结果保存在 vba 变量中?
- .net - 为什么 Serilog PostgreSQL 接收器无法通过配置工作?