美文网首页
WebView简易应用和简易浏览器实现

WebView简易应用和简易浏览器实现

作者: 静水红阳 | 来源:发表于2019-11-18 23:15 被阅读0次

概述

本文简述了以下几项内容:

  1. 对WebView的使用进行简单说明
  2. 利用WebView完成简易内置浏览器功能。

WebView配置

权限声明

WebView主要是打开Web页面,使用必须要首先声明访问网络权限。

<uses-permission android:name="android.permission.INTERNET"/>

setting设置

使用WebView可以对WebView的如下几项进行配置:

  1. WebViewClient
  2. WebChromeClient
  3. 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地址

内置浏览器效果图.jpg

相关文章

网友评论

      本文标题:WebView简易应用和简易浏览器实现

      本文链接:https://www.haomeiwen.com/subject/fmyiictx.html