Android WebView组件用法详解

2019-12-10 18:55:53于丽

 

加载webview网页时所要执行的一些方法

mWebView.setWebViewClient(new WebViewClient() {
    // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
      view.loadUrl(url);
      return true;
    }
    // 开始加载网页时要做的工作
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
      super.onPageStarted(view, url, favicon);
    }
    // 加载完成时要做的工作
    @Override
    public void onPageFinished(WebView view, String url) {
      super.onPageFinished(view, url);
    }
    // 加载错误时要做的工作
    @Override
    public void onReceivedError(WebView view, int errorCode,
        String description, String failingUrl) {
      super.onReceivedError(view, errorCode, description, failingUrl);
    }
});

处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

mWebView.setWebChromeClient(new WebChromeClient() {
    // 提示对话框
    @Override
    public boolean onJsAlert(WebView view, String url, String message,
        final JsResult result) {
      // 构建一个Builder来显示网页中的alert对话框
      Builder builder = new Builder(WebViewDemoActivity.this);
      builder.setTitle("提示对话框");
      builder.setMessage(message);
      builder.setPositiveButton(android.R.string.ok,
          new AlertDialog.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,
                int which) {
              result.confirm();
            }
          });
      builder.setCancelable(false);
      builder.create();
      builder.show();
      return true;
    }
    // 带按钮的对话框
    @Override
    public boolean onJsConfirm(WebView view, String url,
        String message, final JsResult result) {
      Builder builder = new Builder(WebViewDemoActivity.this);
      builder.setTitle("带选择的对话框");
      builder.setMessage(message);
      builder.setPositiveButton(android.R.string.ok,
          new AlertDialog.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,
                int which) {
              result.confirm();
            }
          });
      builder.setNeutralButton(android.R.string.cancel,
          new AlertDialog.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,
                int which) {
              result.cancel();
            }
          });
      builder.setCancelable(false);
      builder.create();
      builder.show();
      return true;
    }
    // 带输入框的对话框
    @Override
    public boolean onJsPrompt(WebView view, String url, String message,
        String defaultValue, final JsPromptResult result) {
      LayoutInflater inflater = LayoutInflater
          .from(WebViewDemoActivity.this);
      final View v = inflater.inflate(R.layout.myDialog, null);
      // 设置 TextView对应网页中的提示信息
      ((TextView) v.findViewById(R.id.textView)).setText(message);
      // 设置EditText对应网页中的输入框
      ((EditText) v.findViewById(R.id.editText))
          .setText(defaultValue);
      Builder builder = new Builder(WebViewDemoActivity.this);
      builder.setTitle("带输入的对话框");
      builder.setView(v);
      builder.setPositiveButton(android.R.string.ok,
          new AlertDialog.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,
                int which) {
              String value = ((EditText) v
                  .findViewById(R.id.editText)).getText()
                  .toString();
              result.confirm(value);
            }
          });
      builder.setNegativeButton(android.R.string.cancel,
          new AlertDialog.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog,
                int which) {
              result.cancel();
            }
          });
      builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
          result.cancel();
        }
      });
      builder.create();
      builder.show();
      return true;
    }
    // 设置网页加载的进度条
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
      WebViewDemoActivity.this.getWindow().setFeatureInt(
          Window.FEATURE_PROGRESS, newProgress * 100);
      super.onProgressChanged(view, newProgress);
    }
    // 设置应用程序的标题
    @Override
    public void onReceivedTitle(WebView view, String title) {
      WebViewDemoActivity.this.setTitle(title);
      super.onReceivedTitle(view, title);
    }
});