2012-02-21 3 views
3

내 웹보기에 데이터를로드하는 동안 진행률 막대를 표시하려면 어떻게해야합니까? 내 코드 :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 스레드를 자유롭게 처리하십시오. 회 전자 또는 진행률 표시 줄을 표시할지 여부를 결정해야합니다. –

+1

가장 좋은 방법은 Paresh에 의해 제안되었지만 WebViewClient를 사용해야한다는 것입니다.이 기술을 사용하면 서버에서 얼마나 많은 데이터를 가져 왔는지 확인할 필요가 없습니다. – Yuvi

+0

다음 링크가 도움이 되길 바랍니다. http://stackoverflow.com/questions/9171510/how-to-show-a-progress-dialog-while-html-page-is-loaded-in-webview/9171581 # 9171581 –

답변

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를 표시하거나 레이아웃 내부의 ProgressBar를 넣어보십시오.

WebViewClient 내에서 progressDialog를 닫거나 (보이지 않게) ProgressBar를 숨 깁니다. 예를 들어

:

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

, loadData() 또는 loadURL()는 웹 클라이언트 설정으로 완료 한 후에 만 ​​호출합니다.

확인이 예 : Load WebView with ProgressDialog

+0

'WebChromeClient class'에는 대신 onPageFinished() 메소드가 없습니다. 'WebViewClient' – Yuvi

+1

@Yuvi 죄송합니다. 내 실수입니다. ** 예제 링크 **를 확인하십시오. –

+0

아직도'WebClient'를'WebViewClient'로 작성했습니다. http://developer.android.com/reference/android/webkit/WebViewClient.html#onPageFinished(android.webkit.WebView, java.lang.String) – Yuvi

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(); 
     } 
} 
관련 문제