Android应用开发之Android WebView基础学习之WebView的基本使用方法
凌雪 2018-09-20 来源 :网络 阅读 404 评论 0

摘要:本文将带你了解Android应用开发之Android WebView基础学习之WebView的基本使用方法,希望本文对大家学Android有所帮助。

本文将带你了解Android应用开发之Android WebView基础学习之WebView的基本使用方法,希望本文对大家学Android有所帮助。


前言
    现在越来越多的App都将原生功能开发转向混合开发,原生只写个“外壳”,内嵌H5页面,便于维护。今天来介绍下Android中内置的高性能内核浏览器webkit。提供了控件WebView以及API
    WebView介绍
1.作用
?121.渲染web页面,可以加载网络或者本地html文件2.和JavaScript进行互相调用
2.WebView创建
    在程序中获取WebView实例有两种方式。
2-1.动态创建WebView实例
?1234private var webView: WebView = null /*构建webview对象*/ webView = WebView(this)
    2-2.布局文件中声明
?1<webview   android:id="@+id/webview"   android:layout_height="match_parent"   android:layout_width="match_parent"></webview>
    3.常用类以及常用方法介绍
    下面介绍WebView类中几个常用的方法。
3-1.声明获取实例
    首先在布局文件中声明 web_view_layout.xml
    ?123456<!--xml version="1.0"   encoding="utf-8"--><linearlayout   android:layout_height="match_parent"   android:layout_width="match_parent"   android:orientation="vertical" xmlns:android="https://schemas.android.com/apk/res/android">  <framelayout   android:id="@+id/web_view_layout"   android:layout_height="match_parent"   android:layout_width="match_parent"> </framelayout></linearlayout>
    动态获取WebView实例以及动态添加到布局中
?123456789101112131415161718192021/*获取Framelayout对象*/webFrameLayout =   findViewById(R.id.web_view_layout) /*构建webview对象*/webView   = WebView(this) /*构建WebView的参数*/val params =   FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT) /*将WebView动态添加到FrameLayout中*/webViewLayout!!.addView(webView, params) if   ("" != linkUrl) {val tmpLink = linkUrl.toLowerCase()if   (!tmpLink.startsWith("https://") &&   !tmpLink.startsWith("https://") &&   !tmpLink.startsWith("file://")) {linkUrl =   "https://$linkUrl"  }webView!!.loadUrl(linkUrl)}
动态创建WebView以及动态添加进入布局的好处是在当页面销毁时候,可以手动将WebView从布局中移除,这样可以避免造成内存泄漏。
?12345678910111213override fun onDestroy()   { super.onDestroy() /*1.将FrameLayout中所有子布局移除(webview)*/ webViewLayout!!.removeAllViews() if   (webView != null) { /*2.清除缓存*/ webView!!.clearCache(true) /*3.清除历史记录*/ webView!!.clearHistory() /*4.调用WebView生命周期方法,此时webview仍然绑定Activity上,所以先调用第1步*/ webView!!.destroy()}}
    3-2.WebView生命周期(参考Activity生命周期)
?12345678910111213141516//webView处于前台可见状态,用户可以操作webView!!.onResume()    //页面失去焦点切换到后台,用户无法操作webView!!.onPause() //暂停webview所有的layout,parsing,javascripttimer。降低CPU功耗。webView.pauseTimers() //恢复pauseTimers状态webView.resumeTimers(); //webview调用destory时,webview仍绑定在Activity上,webview构建时传入了该Activity的context对象//需要先从父容器中移除webview,然后再销毁webview:webFrameLayout.removeView(webView);   webView.destroy();
    3-3.WebViewClient类
    主要用户处理WebView上的一些事件。
?123456789101112131415161718192021222324252627282930313233343536373839404142webView!!.webViewClient   = object : WebViewClient() {   /*页面开始加载 可以设置加载进度条*/  override   fun onPageStarted(view: WebView, url: String, favicon: Bitmap)   {   }  /*复写该方法,表示url加载进本webview中而不会打开系统的浏览器*/  override   fun shouldOverrideUrlLoading(webView: WebView, request: WebResourceRequest):   Boolean {  webView!!.loadUrl("")  return   true  }  /*页面加载结束,可以设置进度条状态*/ override fun onPageFinished(view: WebView, url: String)   {   }   /*加载主机指定的url中的资源*/  override   fun onLoadResource(view: WebView, url: String)   {   }   /*加载页面的服务器出现错误时候调用*/  override fun onReceivedError(view: WebView,   request: WebResourceRequest, error: WebResourceError)   { }   /*webview加载https请求时报错*/  override   fun onReceivedSslError(view: WebView, handler: SslErrorHandler, error:   SslError) {   /*继续挂载请求,等待响应*/  handler!!.proceed()   /*取消挂载请求*/  //handler.cancel()   /*发送消息,做其他处理*/  //handler.handleMessage(null)}  }
    3-4.WebChromeClient类
WebView辅助类,常用功能有处理Javascript,获取web页面的title和图标等。
?123456789101112131415161718  webView!!.webChromeClient   = object : WebChromeClient() {  /*获取网页的加载进度*/ override fun onProgressChanged(view: WebView,   newProgress: Int) { }  /*获取网页的title,可以设置在当前webview上*/ override   fun onReceivedTitle(view: WebView, title: String) { }  /*获取网页的图标*/ override fun   onReceivedIcon(view: WebView, icon: Bitmap) { }   }
    3-5.WebSetting类
val webSetting = webView!!.settings /*启用webview中文件访问,这是针对系统文件。android 的资源文件仍可访问*/webSetting.allowFileAccess = truewebSetting.layoutAlgorithm =   WebSettings.LayoutAlgorithm.NARROW_COLUMNS /*设置WebView是否应支持使用屏幕缩放进行缩放*/webSetting.setSupportZoom(true) /*设置缩放控件是否显示*/webSetting.builtInZoomControls   = true /*设置为false:始终为webview的宽度,true:为视图上最宽的宽度*/webSetting.useWideViewPort = true /*设置WebView是否支持多个窗口*/webSetting.setSupportMultipleWindows(true) /*是否按宽度缩小内容以适合屏幕*/webSetting.loadWithOverviewMode   = true /*设置是否应启用应用程序缓存API*/webSetting.setAppCacheEnabled(true) /*设置是否启用数据库存储API*/webSetting.databaseEnabled   = true /*设置是否启用DOM存储API*/webSetting.domStorageEnabled   = true /*设置是否开启定位*/webSetting.setGeolocationEnabled(true) /*设置是否应显示屏幕缩放控件*/webSetting.displayZoomControls   = false /*设置缓存模式*/webSetting.cacheMode   = WebSettings.LOAD_NO_CACHE    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注移动开发之Android频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程