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

如何在WebView中无需等待页面完全加载就隐藏进度条?

实现WebView首次加载完成后隐藏进度条

Kotlin 实现

先在布局文件中定义WebView和进度条:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ProgressBar
        android:id="@+id/progressBar"
        android:layout_width="match_parent"
        android:layout_height="4dp"
        android:indeterminate="false"
        android:max="100"
        style="?android:attr/progressBarStyleHorizontal"/>

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

然后在Activity中实现逻辑:

class WebViewActivity : AppCompatActivity() {
    private lateinit var webView: WebView
    private lateinit var progressBar: ProgressBar
    private var isFirstLoadCompleted = false // 标记首次加载状态

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_web_view)

        webView = findViewById(R.id.webView)
        progressBar = findViewById(R.id.progressBar)

        // 配置WebView基础参数
        webView.settings.javaScriptEnabled = true
        webView.settings.loadWithOverviewMode = true
        webView.settings.useWideViewPort = true

        // 监听加载进度,仅首次加载时更新进度条
        webView.webChromeClient = object : WebChromeClient() {
            override fun onProgressChanged(view: WebView?, newProgress: Int) {
                super.onProgressChanged(view, newProgress)
                if (!isFirstLoadCompleted) {
                    progressBar.progress = newProgress
                }
            }
        }

        // 监听页面加载完成,首次加载完成后隐藏进度条
        webView.webViewClient = object : WebViewClient() {
            override fun onPageFinished(view: WebView?, url: String?) {
                super.onPageFinished(view, url)
                if (!isFirstLoadCompleted) {
                    progressBar.visibility = View.GONE
                    isFirstLoadCompleted = true // 更新标记,后续加载不再触发隐藏逻辑
                }
            }
        }

        // 加载目标页面
        webView.loadUrl("https://your-target-url.com")
    }
}

Java 实现

布局文件和Kotlin示例一致,Activity代码如下:

public class WebViewActivity extends AppCompatActivity {
    private WebView webView;
    private ProgressBar progressBar;
    private boolean isFirstLoadCompleted = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);

        webView = findViewById(R.id.webView);
        progressBar = findViewById(R.id.progressBar);

        // 配置WebView基础参数
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);

        // 监听加载进度,仅首次加载时更新进度条
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                if (!isFirstLoadCompleted) {
                    progressBar.setProgress(newProgress);
                }
            }
        });

        // 监听页面加载完成,首次加载完成后隐藏进度条
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                if (!isFirstLoadCompleted) {
                    progressBar.setVisibility(View.GONE);
                    isFirstLoadCompleted = true;
                }
            }
        });

        // 加载目标页面
        webView.loadUrl("https://your-target-url.com");
    }
}

关键说明

  • 核心是通过isFirstLoadCompleted布尔变量标记首次加载状态,确保只有第一次页面加载完成时才隐藏进度条,WebView内部后续的页面跳转不会再触发该逻辑。
  • 如果需要调整进度条样式,可修改布局中ProgressBar的style属性,比如换成圆形进度条。

内容的提问来源于stack exchange,提问作者Talha Saglam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 23:33:22