当前位置: 首页 > 知识库问答 >
问题:

WebView中的Android progressbar

单于亮
2023-03-14

我读到应该重写shouldoverrideurlloading()方法。但是我得到一个错误,不能为webchromeclient重写“shouldoverrideurlloading”。

如果您能给出一个具有progressbar和webView的示例,并在同一个webView中打开新的URL,我将非常高兴。

public class WebActivity extends Activity {
    WebView mWebView;
    ProgressBar mProgress;
    Context mContext;
    ProgressBar mProgressBar;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      this.mContext = getApplicationContext();

      super.onCreate(savedInstanceState);
      setContentView(R.layout.web);

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

      mWebView.setWebChromeClient(new myWebChromeClient());
      mWebView.getSettings().setJavaScriptEnabled(true);
      mWebView.getSettings().setUserAgentString("myApp");

      mProgressBar = (ProgressBar) findViewById(R.id.webProgressBar);
      mProgressBar.setMax(100);
  }

  public class myWebChromeClient extends WebChromeClient {
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
          return false;
      }
      @Override
      public void onProgressChanged(WebView view, int newProgress) {
          //WebActivity.this.setValue(newProgress);
          super.onProgressChanged(view, newProgress);
      }
  }
}

共有1个答案

孔志强
2023-03-14

我在活动中做了一些改变。

使用WebViewClient而不是WebChromeClient

并使用ProgressDialog代替ProgressBar

public class WebActivity extends Activity {
    WebView mWebView;
    Context mContext;
    ProgressDialog mProgressBar;
    private static final int DIALOG2_KEY = 1;

   @Override
   public void onCreate(Bundle savedInstanceState) {
      this.mContext = getApplicationContext();
      super.onCreate(savedInstanceState);
      setContentView(R.layout.web);
      mWebView = (WebView) findViewById(R.id.webview);
      mWebView.setWebViewClient(new MyWebChromeClient());
      mWebView.getSettings().setBuiltInZoomControls(true);
      showDialog(DIALOG2_KEY);  }

    @Override
        protected void onResume() {
            super.onResume();
            mWebView.loadUrl("YOUR_URL");
              }

   private final class MyWebChromeClient extends WebViewClient {
        @Override
        public void onPageFinished(WebView view, String url) {
            dismissDialog(DIALOG2_KEY);
        }

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            if (url.startsWith("file")) {
                return false;
            } else{
                view.loadUrl(url);
                return true;
            }
        }
    }

   @Override
    protected Dialog onCreateDialog(int id) {
        switch (id)
        {
        case DIALOG2_KEY:
        {
            mProgressBar.setMessage("Loading");
            mProgressBar.setIndeterminate(true);
            mProgressBar.setCancelable(false);
            return mProgressBar;
        }
        }
        return null;
    }
}
 类似资料:
  • 我已经为android Studio创建了一个webview应用程序。但没有加载web URL。错误为NET::ERR_ACCESS_DENIED。有谁能帮忙吗

  • 我是Java和JavaFX的新手,我只是想知道JavaFX的webview是否可以运行javascript本身,除了它与java代码的通信之外。例如,当窗口加载时,我可以在webview中运行javascript警报语句,并在webview中实际获得警报,就像在普通浏览器中一样。我知道我可以通过以下方式使用我的java代码捕获此警报事件 <代码>Web引擎。setOnAlert设置 但我实际上希望

  • webview标记用于在您的Electron应用中嵌入“来宾”内容,例如网页。 此内容包含在webview容器中。 应用内的嵌入式页面控制着如何显示此内容。 webview在与您的应用程序不同的进程中运行。 为确保恶意内容的安全性,webview与您的网页没有相同的权限。 这可以确保您的应用免受嵌入内容的侵害。 您的应用与嵌入页面之间的所有互动都将是异步的。 让我们考虑一个示例来了解在我们的Ele

  • 我们正在开发JavaFX2。x应用程序,需要提供一些GIS支持。我们得出结论,通过嵌入式网络视图使用GoogleMaps是最快的选择。问题是,每次应用程序启动时,都会下载相应的JavaScript库。这使得开发非常困难,因为在WebView面板上进行任何交互都需要几秒钟的时间。 首先想到的是像Web浏览器一样拥有某种缓存,以便在需要时存储库并在本地读取它们。WebView如何实现这一点?在我们的案

  • 我试着打开。PDF文件在WebView中。我写的代码,可以显示pdf在WebView。 ...

  • null 我设置了webclient @override公共布尔onShowFileChooser(WebView WebView,ValueCallback filePathCallback,FileChooserParams FileChooserParams){返回True;}@override public void onGeolocationPermissionsShowPrompt(S