Android开发:WebView页面加载完成后ProgressBar无法隐藏求助
解决WebView加载完成后隐藏ProgressBar的问题
嘿,我看了你的代码,发现几个小细节没处理好,导致ProgressBar没按预期工作,咱们一步步修正过来:
问题排查
你的代码里有三个核心问题:
- ProgressBar未初始化:你声明了ProgressBar变量,但没在
onCreate里通过findViewById获取控件实例,直接调用setVisibility会导致空指针(哪怕没报错,这个逻辑也根本走不通) - 没使用自定义的WebViewClient:你写了
myWebClient类,但实际给WebView设置的是默认的WebViewClient,所以你重写的onPageStarted和onPageFinished完全没被触发 - URL缺少协议头:
webview.loadUrl("www.google.com")里的地址没有https://前缀,WebView无法识别并加载这个地址
修改后的完整代码
MainActivity.java
package test.com.webview; import android.graphics.Bitmap; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; import android.widget.ProgressBar; public class MainActivity extends AppCompatActivity { WebView webview; ProgressBar progressBar; @Override public void onBackPressed() { if (webview.canGoBack()) { webview.goBack(); } else { super.onBackPressed(); } } @Override protected void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webview = findViewById(R.id.webView); // 初始化ProgressBar控件实例 progressBar = findViewById(R.id.progressBar); WebSettings webSettings = webview.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setDomStorageEnabled(true); // 替换成咱们自定义的myWebClient,触发回调方法 webview.setWebViewClient(new myWebClient()); // 添加https协议头,确保WebView能正常加载地址 webview.loadUrl("https://www.google.com"); } public class myWebClient extends WebViewClient{ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); // 页面开始加载时显示ProgressBar progressBar.setVisibility(View.VISIBLE); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 页面加载完成后隐藏ProgressBar progressBar.setVisibility(View.INVISIBLE); } } }
额外优化建议(可选)
你的main_activity.xml里WebView的宽高写死了固定值,换成match_parent会更适配不同尺寸的设备:
<WebView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerHorizontal="true" android:id="@+id/webView" />
内容的提问来源于stack exchange,提问作者Rikhi Sahu
相关产品推荐
相关产品推荐

