Android Webview 基础教程

写在前面:这段时间公司的App再做嵌入式HTML开发,通过这段时间的整理和趟坑,笔者想分享一下WebView的常用知识。笔者也认同"大前端是未来的大势所趋"的观点。


一、介绍

WebView是一个可以用来加载本地HTML,或者网页链接的Web网页控件,可以理解为一个浏览器。因为WebView的API提供浏览器的基本操作。

PS:Android 4.4之前使用WebKit作为渲染内核,4.4以后统一采用Google的Chrome内核。

二、使用


<!--1.在[../app/src/main/AndroidManifest.xml]中配置网络权限-->
<uses-permission android:name="android.permission.INTERNET"/>

<!--2.在[../app/src/main/res/layout/activity_webview.xml]布局WebView-->

<WebView
    android:id="@+id/main_webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</WebView>
// 3.在[../app/src/main/java/com/macro/xxx/WebViewActivity.java]中配置WebView

mWebView = findViewById(R.id.web_view);
mWebView.loadUrl("https://www.baidu.com/");
mWebView.setWebChromeClient(new WebChromeClient());
mWebView.setWebViewClient(new WebViewClient());

三、常用系统方法(Public methods)

// 注入Java Object到 Webview
public void addJavascriptInterface(Object object, String name)
// WebView是否可以回退
public boolean canGoBack()
// WebView是否可以前进
public boolean canGoForward() 
// 清除所有Webview的缓存
public void clearCache(boolean includeDiskFiles) 
// 清除前进、后退历史
public void clearHistory()
// 生命周期方法 WebView销毁
public void destroy() 
// 异步调用JS, 并且获取返回值
public void evaluateJavascript(String script, ValueCallback<String> resultCallback)
// 获取网页内容高度
public int getContentHeight() 
// 获取Setting对象,用于控制Webview
public WebSettings getSettings() 
// 获取标题
public String getTitle() 
// 获取URL 
public String getUrl()  
// 获取Chrome client 对象
public WebChromeClient getWebChromeClient() 
// 获取WebView Client 对象
public WebViewClient getWebViewClient() 
// 返回上一历史
public void goBack() 
// 跳转前进后退历史的任意一页
public void goBackOrForward(int steps) 
// 前进
public void goForward() 
// 加载data,可用于加载html代码段 
public void loadData(String data, String mimeType, String encoding) 
// 加载URL,可加载本地或网络连接
public void loadUrl(String url) 
// 同上,可以加HTTPSHeader
public void loadUrl(String url, Map<String, String> additionalHttpHeaders)
// 生命周期,暂停加载
public void onPause()
// 生命周期,恢复加载
public void onResume()
// 刷新页面
public void reload()
// 移除java接口对象
public void removeJavascriptInterface(String name)
// 设置背景色
public void setBackgroundColor(int color)
// 设置越界滚动模式
public void setOverScrollMode(int mode)
// 设置滚动条样式
public void setScrollBarStyle(int style)
// 设置Chrome Client
public void setWebChromeClient(WebChromeClient client)
// 允许网页内容的Debug  (HTML/CSS
public static void setWebContentsDebuggingEnabled(boolean enabled)
// 设置WebView Client
public void setWebViewClient(WebViewClient client) 
//  停止加载
public void stopLoading()

四、WebView几个主要对象(WebSettings、WebViewClient、WebChromeClient)

4.1 WebSettings

  • 4.1.1 获取WebSettings
WebSettings webSettings = mWebView .getSettings();  
  • 4.1.2 JS交互相关
    // 允许JS交互
public void setJavaScriptEnabled(true);
    // 允许插件
public void  setPluginsEnabled(true);         
    // 允许通过JS打开新窗口
public void setJavaScriptCanOpenWindowsAutomatically(true); 
  • 4.1.3 缩放处理
    // 将图片调整到适合webview的大小
public void setUseWideViewPort(true);
    // 缩放至屏幕的大小
public void setLoadWithOverviewMode(true); 
    //支持缩放,默认为true。是下面那个的前提。
public void setSupportZoom(true);
    //设置内置的缩放控件。 这个取决于setSupportZoom(), 若setSupportZoom(false),则该WebView不可缩放,这个不管设置什么都不能缩放。
public void setBuiltInZoomControls(true); 
    //隐藏原生的缩放控件
public void setDisplayZoomControls(false); 

4.2 WebViewClient

用于处理通知和各种事件,通过重载方法使用👇

// 网页加载的时候拦截URL
public boolean shouldOverrideUrlLoading(WebView view, String loadUrl);
// 页面开始加载的时候调用
public void onPageStarted(WebView view, String url, Bitmap favicon); 
// 页面加载完成的时候调用
public void onPageFinished(WebView view, String url); //在页面加载结束时调用, 我们可以关闭loading 条,切换程序动作。

4.3 WebChromeClient

处理JS的对话框、网址图标、网址标题和加载进度,通过重载方法使用👇

// 进度改变
public void onProgressChanged(WebView view, int newProgress); 
// 获取标题
public void onReceivedTitle(WebView view, String title);
// 获取icon
public void onReceivedIcon(WebView view, Bitmap icon);
// 处理alert弹出框
public boolean onJsAlert(WebView view, String url, String message, JsResult result); 
// 处理prompt弹出框
public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) 
// 处理confirm弹出框
public boolean onJsConfirm(WebView view, String url, String message, JsResult result); 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342