概述
本文简述了以下几项内容:
- 对WebView的使用进行简单说明
- 利用WebView完成简易内置浏览器功能。
WebView配置
权限声明
WebView主要是打开Web页面,使用必须要首先声明访问网络权限。
<uses-permission android:name="android.permission.INTERNET"/>
setting设置
使用WebView可以对WebView的如下几项进行配置:
- WebViewClient
- WebChromeClient
- WebSetting
WebViewClient用来配置web页面加载URL状态回调,示例代码如下:
private fun setWebViewClient() {
webView?.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
if (url == null)
return
updateBottomBar()
currentUrl = url
setCookie(cookie, currentUrl)
//标准网址直接加载
if (url.startsWith("http://") || url.startsWith("https://")) {
super.onPageStarted(view, url, favicon)
} else {
try {
var intent = Intent(Intent.ACTION_VIEW, Uri.parse(url))
startActivity(intent)
//跳转之后返回上一页面
if (webView?.canGoBack() == true)
webView?.goBack()
else
this@InAppBrowserActivity.finish()
} catch (e: Exception) { //防止出现特殊域名导致出错
if (webView?.canGoBack() == true)
webView?.goBack()
else
this@InAppBrowserActivity.finish()
}
}
}
override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
updateBottomBar()
super.onReceivedError(view, request, error)
}
}
}
在WebchromeClient中可以获取到web页面的title,同时有加载进度回调方法。
示例代码如下:
private fun setWebChromeClient() {
webView?.webChromeClient = object : WebChromeClient() {
override fun onReceivedTitle(view: WebView?, title: String?) {
super.onReceivedTitle(view, title)
textTitle?.text = title ?: ""
}
override fun onProgressChanged(view: WebView?, newProgress: Int) {
progressBar?.progress = newProgress
if (newProgress == 100)
progressBar?.visibility = View.GONE
super.onProgressChanged(view, newProgress)
}
}
}
WebSetting用来设置当前WebView支持的特殊配置,如支持JS,编码格式设定etc.示例代码如下:
private fun setWebSetting() {
val webSettings = webView?.settings
webSettings?.javaScriptEnabled = true //支持js
webSettings?.domStorageEnabled = true
webSettings?.useWideViewPort = true //将图片调整到适合webview的大小
webSettings?.loadWithOverviewMode = true // 缩放至屏幕的大小
webSettings?.allowFileAccess = true //设置可以访问文件
webSettings?.setNeedInitialFocus(true) //当webview调用requestFocus时为webview设置节点
webSettings?.javaScriptCanOpenWindowsAutomatically = true //支持通过JS打开新窗口
webSettings?.loadsImagesAutomatically = true //支持自动加载图片
webSettings?.defaultTextEncodingName = "utf-8"//设置编码格式
}
WebView实现简易浏览器
为WebView添加title和前进返回按钮。
示例代码:
GitHub demo地址

网友评论