Webview使用方法

469 阅读3分钟

一.用法介绍

  • Webview是Android原生控件主要是用来处理移动端内部嵌入网页进行交互。

  • 其次Webview也可以实现Android和JS之间的相互通信,因此这部分Android可以充当主控的部分,通过其他部件传输过来的数据利用JS处理返回回去。

  • 加载方式

Webview webview;

webview.loadUrl(URL);

<WebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</WebView>

//id就是给webview控件设置id使用webview.findViewById(R.id.webview)实现加载webview

//layout_width 设置宽

//layout_height设置高

二.websettings

WebSettings webSettings = webView.getSettings();

webSettings.setJavaScriptEnabled(true); -> 是否开启JS支持
webSettings.setPluginsEnabled(true); -> 是否开启插件支持
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); -> 是否允许JS打开新窗口

webSettings.setUseWideViewPort(true); -> 缩放至屏幕大小
webSettings.setLoadWithOverviewMode(true); -> 缩放至屏幕大小
webSettings.setSupportZoom(true); -> 是否支持缩放

webSettings.setAllowFileAccess(true); -> 是否允许访问文件
webSettings.setDomStorageEnabled(true); -> 是否节点缓存
webSettings.setDatabaseEnabled(true); -> 是否数据缓存
webSettings.setAppCacheEnabled(true); -> 是否应用缓存
webSettings.setAppCachePath(uri); -> 设置缓存路径

webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); -> 按规则重新布局
webSettings.setLoadsImagesAutomatically(false); -> 是否自动加载图片
webSettings.setDefaultTextEncodingName("UTF-8"); -> 设置编码格式
webSettings.setNeedInitialFocus(true); -> 是否需要获取焦点
webSettings.setGeolocationEnabled(false); -> 设置开启定位功能
webSettings.setBlockNetworkLoads(false); -> 是否从网络获取资源

三.WebChromeClient

-处理与JS交互请求等等各种事情,浏览器客户端,用于处理网站图标、网站标题、网站弹窗等

  • 使用示例

WebChromeClient webChromeClient = new WebChromeClient();

onProgressChanged():->页面加载进度发生变化时调用,可以通过该方法实时向用户反馈加载情况,如显示进度条等。

onReceivedIcon():->接收Web页面的图标,可以通过该方法把图标设置在原生的控件上,如Toolbar等。

onReceivedTitle():->接收Web页面的标题,可以通过该方法把图标设置在原生的控件上,如Toolbar等。

onJsAlert():->处理JS的Alert对话框。

onJsPrompt():->处理JS的Prompt对话框。

onJsConfirm():->处理JS的Confirm对话框。

onPermissionRequest():->Web页面请求Android权限时调用。

onPermissionRequestCanceled():->Web页面请求Android权限被取消时调用。

onShowFileChooser():->Web页面上传文件时调用。

getVideoLoadingProgressView():->自定义媒体文件播放加载时的进度条。

getDefaultVideoPoster():->设置媒体文件默认的预览图。

onShowCustomView():->媒体文件进入全屏时调用。

onHideCustomView():->媒体文件退出全屏时调用。

WebViewClient webViewClient = new WebViewClient(){
  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {

  }

  @Override
  public void onPageFinished(WebView view, String url) {

  }

  @Override
  public boolean onLoadResource(WebView view, String url) {

  }

  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;//-> 消费事件终止传递
  }

  @Override
  public void onReceivedError(WebView view, int errorCode, 
    String description, String failingUrl){
    view.loadUrl("file:///android_assets/error.html"); -> assets目录下放置文件
}

webView.setWebViewClient(webViewClient);

五.WebChromeClient

浏览器客户端,用于处理网站图标、网站标题、网站弹窗等。

WebChromeClient webChromeClient = new WebChromeClient();

onProgressChanged()://页面加载进度发生变化时调用,可以通过该方法实时向用户反馈加载情况,如显示进度条等。
onReceivedIcon()://接收Web页面的图标,可以通过该方法把图标设置在原生的控件上,如Toolbar等。
onReceivedTitle()://接收Web页面的标题,可以通过该方法把图标设置在原生的控件上,如Toolbar等。
onJsAlert()://处理JS的Alert对话框。
onJsPrompt()://处理JS的Prompt对话框。
onJsConfirm()://处理JS的Confirm对话框。
onPermissionRequest()://Web页面请求Android权限时调用。
onPermissionRequestCanceled()://Web页面请求Android权限被取消时调用。
onShowFileChooser()://Web页面上传文件时调用。
getVideoLoadingProgressView()://自定义媒体文件播放加载时的进度条。
getDefaultVideoPoster()://设置媒体文件默认的预览图。
onShowCustomView()://媒体文件进入全屏时调用。
onHideCustomView()://媒体文件退出全屏时调用。