Webview中的进度条

3

我在使用进度条时遇到了一些问题,有人能帮我看看源代码吗?我是否漏掉了什么?

 web = (WebView) findViewById(R.id.webview01);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        web.setWebViewClient(new myWebClient());

        //ADDING THIS RESOLVED THE PROGRESS BAR ACTUALLY LOADING.
        web.setWebChromeClient(new WebChromeClient() {
        public void onProgressChanged(WebView view, int progress) {
        progressBar.setProgress(progress); } 
        });
        //ADDING THIS RESOLVED THE PROGRESS BAR ACTUALLY LOADING.

        WebSettings websettings = web.getSettings();
        websettings.setBuiltInZoomControls(true);
        websettings.setUseWideViewPort(true);
        websettings.setJavaScriptEnabled(true);
        websettings.setAllowFileAccess(true);
        websettings.setDomStorageEnabled(true);
        websettings.setLoadWithOverviewMode(true);
        websettings.setSavePassword(true);
        web.loadUrl("http://www.google.com");

然后,在代码的后面
    //Loading the Actual Webpage
public class myWebClient extends WebViewClient
{
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
        progressBar.setVisibility(View.VISIBLE);

    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub

        view.loadUrl(url);
        progressBar.setVisibility(View.VISIBLE);
        return true;

    }
    //web.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
         progressBar.setProgress(progress);

    }




    @Override
    public void onPageFinished(WebView view, String url) {
        // TODO Auto-generated method stub
        super.onPageFinished(view, url);

        progressBar.setVisibility(View.GONE);
    }

}

网页视图本身运行良好,我只是想要一个水平加载条,类似于Dolphin,Chrome等浏览器。

这是布局。

 <?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent"
 android:background="@drawable/bgapp"
 android:fadingEdge="horizontal"
 android:gravity="center"
 android:orientation="vertical" >

 <include
    android:id="@+id/inc_blue"
    android:layout_width="fill_parent"
    android:layout_height="50dp"
    layout="@layout/inc_enphase_bar_with_title_buttons" />

<ProgressBar
    android:id="@+id/progressBar"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:minHeight="8dip" />

<WebView
    android:id="@+id/webview01"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1.15"
    android:fadingEdge="vertical" >

</WebView>

我没有收到任何错误信息,所以没有logcat,它只是实际加载,当网页正在加载时,它会显示进度条,但没有动画或实际的加载动作。


在 inPageStarted 回调中放置 progressBar.setVisibility(View.VISIBLE)。 - Blackbelt
1个回答

3
你还应该使用中间进度来设置,可以通过使用 progress 元素实现。
progressBar.setProgress(int);

为了显示进度,你所做的只是显示和隐藏视图。
编辑: 添加以下代码。
   @Override
   public void onProgressChanged(WebView view, int progress) {
     progressBar.setProgress(progress);
   }

抱歉,您需要一个WebChromeClient来完成这个任务。请按以下方式操作:将其放置在

下面。
web.setWebViewClient(new myWebClient());
//add this below line
web.setWebChromeClient(new WebChromeClient() {
   public void onProgressChanged(WebView view, int progress) {
        progressBar.setProgress(progress);
   }
 });

请查看WebView文档,其中有一个示例。


жҲ‘еә”иҜҘеңЁжҲ‘зҡ„myWebclientдёӯзҡ„е“ӘйҮҢж”ҫзҪ®progressBar.setProgress(int);пјҹдҪ д»¬дёӯжңүдәәзҹҘйҒ“еңЁwebviewдёӯдҪҝз”Ёchromeclientзҡ„дёңиҘҝжҳҜеҗҰжӣҙеҘҪеҗ—пјҹ - Jaison Brooks
我对ChromeClient不太确定,从未接触过。重写WebViewClient类的onProgresschanged方法。 - nandeesh
我已经更新了源代码,这是我认为你建议的内容,你能看一下吗?如果我出错了,请随意编辑代码。 - Jaison Brooks
我已经编辑了代码。不要乘以1000,因为1000是Activity标题进度条使用的。在进度条的最大值为100的情况下,您可以直接传递onprogresschanged的进度变量。 - nandeesh
我在使用现有源代码时遇到了问题,无法让 web.setWebChromeClient(new WebChromeClient() { 正常工作。我更新了我的源代码,并将其注释掉以避免错误,你有什么思路可以帮助我添加必要的内容吗?也许我没有正确的格式。 - Jaison Brooks
不要放在类里面,把它放在设置webclient的地方。我已经编辑了代码。 - nandeesh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接