📜  在Android中的WebView中加载URL时如何在ProgressBar中显示进度?(1)

📅  最后修改于: 2023-12-03 14:51:14.393000             🧑  作者: Mango

在Android中的WebView中加载URL时如何在ProgressBar中显示进度?

在Android中,WebView是一个能够显示网页内容的控件。当WebView加载网页时,我们有时需要显示加载进度。ProgressBar是一个进度条控件,可以用来显示加载进度。本文将介绍如何在Android中的WebView中加载URL时如何在ProgressBar中显示进度。

1. 创建布局文件

我们需要在布局文件中添加一个WebView和一个ProgressBar。如下所示:

<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/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true" />

</RelativeLayout>
2. 在Activity中实现WebViewClient

WebViewClient是一个用于处理WebView页面加载事件的类。我们需要在Activity中继承WebViewClient并对其进行实现,以实现在ProgressBar中显示加载进度。

public class MyWebViewClient extends WebViewClient {

    private ProgressBar progressBar;

    public MyWebViewClient(ProgressBar progressBar) {
        this.progressBar = progressBar;
    }

    // 当页面开始加载时调用
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        super.onPageStarted(view, url, favicon);
        progressBar.setProgress(0);
        progressBar.setVisibility(View.VISIBLE);
    }

    // 当页面加载完成后调用
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        progressBar.setVisibility(View.GONE);
    }

    // 当页面加载进度改变时调用
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        super.onProgressChanged(view, newProgress);
        progressBar.setProgress(newProgress);
    }

}
3. 在Activity中加载WebView并设置WebViewClient
public class MainActivity extends AppCompatActivity {

    private WebView webView;
    private ProgressBar progressBar;

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

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

        webView.setWebViewClient(new MyWebViewClient(progressBar));
        webView.loadUrl("http://www.example.com");
    }
}

在Activity中,我们先获取WebView和ProgressBar控件。然后,我们创建一个实例化的MyWebViewClient对象,并传入ProgressBar对象。最后,我们设置WebViewClient为MyWebViewClient对象,并调用loadUrl方法加载网页。当网页开始加载时,onPageStarted方法将被调用,并显示ProgressBar。当网页完成加载时,onPageFinished方法将被调用,ProgressBar将被隐藏。在页面加载过程中,onProgressChanged方法将被调用,并设置ProgressBar的进度。

至此,我们就成功实现了在Android中的WebView中加载URL时在ProgressBar中显示进度的功能。