代码之家  ›  专栏  ›  技术社区  ›  UMAR-MOBITSOLUTIONS

如何在webview上显示进度条?

  •  34
  • UMAR-MOBITSOLUTIONS  · 技术社区  · 15 年前

    我正在尝试使用打开应用程序中的网页 WebView

    我使用以下代码:

    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());
    
    5 回复  |  直到 14 年前
        1
  •  45
  •   Wroclai    15 年前

    试试这个:

    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);
    
        2
  •  21
  •   C--    10 年前

    以下是我正在使用的代码:

    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);
        }
    
    });
    

    以下是XML:

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

    希望这有帮助。。

        3
  •  11
  •   Sergey Glotov Nitesh Khosla    9 年前

    你需要这样做:

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

    然后

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


    我知道现在有点晚了,但我有一点小提示:你不应该用 setWebViewClient() 两次。第二个调用取消第一个调用,这样您就不会得到错误处理。

        4
  •  3
  •   duggu Neeraj Nama    13 年前

    .

    三。在webview客户端,你只需再次显示进度对话框,点击在你的webview中打开的任何网站链接,完成加载链接后 重写方法

    一次创建

    @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();
    
    }
    

    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();
    
        }
    
    }
    

    webview客户端

    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();
            }
    
        }
    }
    
        5
  •  0
  •   Marcelo Gracietti    9 年前

    这是我用的代码 科特林

    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"
    }