2010-10-11 28 views
31

Tôi đang cố mở một trang web trong ứng dụng của mình bằng cách sử dụng WebView. Khi tôi mở trang web nó cho tôi thấy màn hình trống trong một thời gian và sau đó mở trang đó trong trình duyệt bên trong ứng dụng của tôi.cách hiển thị thanh tiến trình trên chế độ xem web?

Bất cứ ai cũng đề xuất cho tôi cách hiển thị tiến trình hoặc loại bỏ màn hình trống có trong quá trình tải chế độ xem web?

Tôi đang sử dụng đoạn mã sau:

WebView mWebView = (WebView) findViewById(R.id.mywebview); 
mWebView.getSettings().setJavaScriptEnabled(true); 

// error handling 
final Activity activity = this; 

mWebView.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 
    } 
}); 

// error handling 

mWebView.loadUrl(URL); 
mWebView.setWebViewClient(new HelloWebViewClient()); 
+0

thể trùng lặp của [Android thanh tiến trình WebView] (http://stackoverflow.com/questions/2537454/android-webview-progress -bar) –

Trả lời

40

Hãy thử điều này:

getWindow().requestFeature(Window.FEATURE_PROGRESS); 

WebView mWebView = (WebView) findViewById(R.id.mywebview); 

mWebView.getSettings().setJavaScriptEnabled(true); 

final Activity activity = this; 

mWebView.setWebChromeClient(new WebChromeClient(){ 

     public void onProgressChanged(WebView view, int progress) { 
       activity.setTitle("Loading..."); 
       activity.setProgress(progress * 100); 
        if(progress == 100) 
         activity.setTitle("My title"); 
       } 
}); 

mWebView.loadUrl(URL); 
+0

cũng hoạt động cho tôi :) – sunil

+0

khi tôi nhấp vào url mở thông qua ứng dụng chrome. Nhưng tôi muốn mở nó trên trang web của tôi với thanh tiến trình dòng. –

+5

Cửa sổ.FEATURE_PROGRESS không được chấp nhận – amorenew

10

Bạn cần phải làm một cái gì đó như thế này:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.requestWindowFeature(Window.FEATURE_PROGRESS); 
    this.setProgressBarVisibility(true); 
} 

Và sau đó

final Activity activity = this; 
mWebView.setWebChromeClient(new WebChromeClient() { 
    public void onProgressChanged(WebView view, int progress) { 
     activity.setProgress(progress * 100); 
    } 
}); 

Cập nhật
Tôi biết nó là hơi muộn nhưng tôi có ít lưu ý phụ: bạn không nên sử dụng setWebViewClient() hai lần. Cuộc gọi thứ hai hủy cuộc gọi đầu tiên để bạn không bị xử lý lỗi.

+0

cảm ơn cả hai đều làm việc :) – UMAR

3

1. Trong onCreate ur gọi AsyncTask.

2. Trong hộp thoại asynctask bạn chỉ cần thực hiện tiến trình và hiển thị hộp thoại tiến trình.

3. Trong client webview u chỉ hiển thị một lần nữa tiến nhấp chuột thoại vào bất kỳ liên kết của trang web mà mở trong ur webview và sau khi liên kết tải hoàn tất, chúng tôi ghi đè phương pháponPageFinished và trong phương pháp này chúng ta bỏ qua những tiến bộ hộp thoại.

onCreate

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 

    this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.web_view); 

    web_view = (WebView) findViewById(R.id.web_view); 

    OpenWebSiteInWebView opensite = new OpenWebSiteInWebView(); 
    opensite.execute(); 

} 

AsyncTask

private class OpenWebSiteInWebView extends AsyncTask<String, Void, String> { 

    @SuppressWarnings("deprecation") 
    @SuppressLint("SetJavaScriptEnabled") 
    @Override 
    protected String doInBackground(String... params) { 
     web_view.setWebViewClient(new MyWebViewClient()); 
     web_view.loadUrl("ur site name"); 
     return null; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

    } 

    @Override 
    protected void onPreExecute() { 

     pd = new ProgressDialog(SiteOpenInWebView.this); 
     pd.setMessage("Please wait Loading..."); 
     pd.show(); 

    } 

} 

WebViewClient

private class MyWebViewClient extends WebViewClient { 
    @Override 
    public boolean shouldOverrideUrlLoading(WebView view, String url) { 
     view.loadUrl(url); 

     if (!pd.isShowing()) { 
      pd.show(); 
     } 

     return true; 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     System.out.println("on finish"); 
     if (pd.isShowing()) { 
      pd.dismiss(); 
     } 

    } 
} 
17

Dưới đây là đoạn code mà tôi đang sử dụng:

Bên WebViewClient:

webView.setWebViewClient(new WebViewClient() { 

    @Override 
    public void onPageStarted(WebView view, String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); 
     findViewById(R.id.progress1).setVisibility(View.VISIBLE); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); 
     findViewById(R.id.progress1).setVisibility(View.GONE); 
    } 

}); 

Đây là XML:

<ProgressBar 
    android:id="@+id/progress1" 
    android:layout_centerHorizontal="true" 
    android:layout_centerVertical="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" /> 

Hope this helps ..

0

Đây là mã Tôi đang sử dụng trong Kotlin:

private fun setupWebView() { 

    val webViewClient: WebViewClient = object: WebViewClient() { 

     override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean { 
      view?.loadUrl(request?.url.toString()) 
      return super.shouldOverrideUrlLoading(view, request) 
     } 

     override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { 
      showProgressDialog() 
      super.onPageStarted(view, url, favicon) 
     } 

     override fun onPageFinished(view: WebView?, url: String?) { 
      hideProgressDialog() 
      super.onPageFinished(view, url) 
     } 
    } 
    webView.webViewClient = webViewClient 

    webView.settings.javaScriptEnabled = true 
    webView.settings.defaultTextEncodingName = "utf-8" 
} 
Các vấn đề liên quan