2012-02-21 66 views
3

如何在将数据加载到我的webview时显示进度条? 我的代码:Android:如何在将数据加载到WebView时显示进度条?

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_PROGRESS); 
    getWindow().setFeatureInt(Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON); 
    this.setProgressBarVisibility(true); 
    setContentView(R.layout.layout_article); 
    WebView webview = (WebView) findViewById(R.id.webView); 
    final Activity activity = this; 
    webview.setWebChromeClient(new WebChromeClient() { 
     public void onProgressChanged(WebView view, int progress) { 
      activity.setProgress(progress * 100); 
     } 
    }); 

    webView.loadUrl("http://google.com"); 
} 
+0

你需要上传移动到一个单独的线程,以释放处理主UI线程。您还必须决定是否显示微调框或进度栏。 – 2012-02-21 09:56:12

+1

最好的方法是由Paresh建议,但是你必须使用'WebViewClient',使用这个技术你不必看看你从服务器上获取了多少数据。 – Yuvi 2012-02-21 10:26:24

+0

我希望以下链接将帮助您: http://stackoverflow.com/questions/9171510/how-to-show-a-progress-dialog-while-html-page-is-loaded-in-webview/9171581 #9171581 – 2012-02-21 10:40:28

回答

1
public class MainActivity extends AppCompatActivity { 

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

     final ProgressBar progress = (ProgressBar) findViewById(R.id.progress); 

     WebView webView = (WebView) findViewById(R.id.webview); 
     webView.getSettings().setJavaScriptEnabled(true); 
     webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public boolean shouldOverrideUrlLoading(final WebView view, final String url) { 
       return false; 
      } 

      @Override 
      public void onPageStarted(final WebView view, final String url, final Bitmap favicon) { 
       progress.setVisibility(View.VISIBLE); 
       super.onPageStarted(view, url, favicon); 
      } 

      @Override 
      public void onPageFinished(final WebView view, final String url) { 
       progress.setVisibility(View.GONE); 
       super.onPageFinished(view, url); 
      } 
     }); 

     webView.loadUrl("http://google.com"); 
    } 
} 

而且R.layout.activity_main

<?xml version="1.0" encoding="utf-8"?> 
<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/progress" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:layout_centerInParent="true"/> 
</RelativeLayout> 
5

在调用loadData()函数,只要尝试显示ProgressDialog或进度把里面的布局。

而在WebViewClient中,只需解除()progressDialog或使ProgressBar不可见。

例如:

// when finish loading page 
public void onPageFinished(WebView view, String url) { 
     if(mProgress.isShowing()) { 
      mProgress.dismiss(); 
     } 
} 

仅供参考,调用loadData()或您与Web客户端的设置完成后,才使用loadURL()。

检查这个例子:Load WebView with ProgressDialog

+0

'WebChromeClient类没有'onPageFinished()方法'而不是它在'WebViewClient' – Yuvi 2012-02-21 10:22:29

+1

@Yuvi抱歉我的错误,更正。 **检查示例链接**。 – 2012-02-21 10:25:04

+0

仍然有写'WebClient'它是'WebViewClient' http://developer.android.com/reference/android/webkit/WebViewClient.html#onPageFinished(android.webkit.WebView,java.lang.String) – Yuvi 2012-02-21 10:31:02

3

请尝试以下代码,

ProgressDialog progDailog = ProgressDialog.show(context,"Process ", "Loading Data...",true,true); 

new Thread (new Runnable() 
{ 
    public void run() 
    { 
     // your data loading code goes here 
    } 
}).start(); 

Handler progressHandler = new Handler() 
{ 

    public void handleMessage(Message msg1) 
    { 

     progDailog.dismiss(); 
     } 
} 
相关问题