You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:45:55