一.用法介绍
-
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()://媒体文件退出全屏时调用。