【问题标题】:How to add spinner loader (NOT PROGRESS BAR) before webview loads a webpage in Android?如何在 webview 在 Android 中加载网页之前添加微调器加载程序(不是进度条)?
【发布时间】:2014-10-05 03:35:21
【问题描述】:

![在此处输入图片描述][1]

我在警报对话框中有一个 webview。如何在 webview 加载之前显示加载器微调器(不是 PROGRESS BAR),然后在加载网页后隐藏?下面是我的代码。这里我没有为 webview 使用任何 xml,它是动态生成的简单 webview:

     progress = new ProgressDialog(activity);
            progress.setMessage("Please wait......");
            progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progress.setIndeterminate(true);
            progress.show();

            WebView wv = new WebView(activity);
            //wv.loadUrl("http:\\www.google.com");
              wv.getSettings().setJavaScriptEnabled(true);
              wv.getSettings().setBuiltInZoomControls(true);
              wv.getSettings().setSupportZoom(true);
              wv.getSettings().setUseWideViewPort(true);
              wv.setClickable(true);
              wv.setInitialScale(1);
              wv.loadUrl("https://www.yahoo.com");


            wv.setOnKeyListener(new OnKeyListener()
            {
                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event)
                {
                    if(event.getAction() == KeyEvent.ACTION_DOWN)
                    {
                        WebView webView = (WebView) v;

                        switch(keyCode)
                        {
                            case KeyEvent.KEYCODE_BACK:
                                if(webView.canGoBack())
                                {
                                    webView.goBack();
                                    return true;
                                }
                                break;
                        }
                    }

                    return false;
                }
            });

            wv.setWebViewClient(new WebViewClient() {


                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    // view.loadUrl(url);
                    // return true;
                    Log.d(TAG, "shouldOverrideUrlLoading");

                    String cleanUrl = url;
                    if (url.contains("?")) {
                        // remove the query string
                        cleanUrl = url.substring(0, url.indexOf("?"));
                    }

                    if (cleanUrl.endsWith("pdf")) {
                        Intent intent = new Intent(Intent.ACTION_VIEW);
                        intent.setDataAndType(Uri.parse(url), "application/pdf");
                        try {
                            Uri uriUrl = Uri.parse(cleanUrl);
                            Intent intentUrl = new Intent(Intent.ACTION_VIEW,
                                    uriUrl);
                            view.getContext().startActivity(intentUrl);
                            return true;

                        } catch (Exception e) {
                            System.out.println(e);
                            Toast.makeText(context, "No PDF Viewer Installed",
                                    Toast.LENGTH_LONG).show();
                        }
                    } else {
                        view.loadUrl(url);
                    }
                    return true;
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    // TODO Auto-generated method stub
                    if (progress.isShowing()) {
                        progress.dismiss();
                    }
                    Log.d(TAG, "onPageFinished");

                }

                @Override
                public void onPageStarted(WebView view, String url,
                        Bitmap favicon) {
                    // TODO Auto-generated method stub
                    Log.d(TAG, "onPageStarted");
                }
            });

            builder.setView(wv);
            builder.show();
            return false;

【问题讨论】:

  • 在我看来,您必须在要添加 web 视图的布局中添加进度条。您可以使用 WebChromeClient 的 onProgressChanged() 方法控制其可见性。
  • 进度条不是微调器......我正在寻找一个圆形加载器......
  • 您能否发布所需微调器的图像以更清晰?为此,您可以创建自己的逐帧动画。

标签: android webview dialog spinner loader


【解决方案1】:

试试这个方法,希望能帮助你解决问题。

progressBar.setVisibility(View.VISIBLE);
wv.setWebChromeClient(new WebChromeClient() {
    public void onProgressChanged(WebView view, int progress) {
       if(progress==100){
           progressBar.setVisibility(View.GONE);
       }
    }
});

【讨论】:

  • Haresh:谢谢,但我正在寻找加载器微调器,而不是进度条,那么这段代码是否符合我的目的?
  • 是的,请尝试让我知道仍有任何问题。
  • Haresh :请查看编辑后的代码。我自己尝试了一些东西。实际上没有你的建议,因为它需要为 webview 定义 xml,而我的是动态生成的。在这种情况下,它本身并没有显示进度条。
  • 调试上面的代码我看到的是它正在创建一个进度对话框并关闭,但显示没有出现。你知道可能是什么原因吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2020-06-09
相关资源
最近更新 更多