您的位置:

Android WebView原理和用法详解

WebView是Android中一个非常重要的组件,他可以在应用内部显示网页和嵌入第三方应用。WebView内部采用WebKit内核,可以解析渲染HTML、CSS和JS等Web前端技术,由于内置了WebKit,开发者可以方便地在应用中内嵌网页以及通过JavaScript与原生代码进行交互。

一、WebView的创建与初始化

首先,我们需要将WebView组件添加到我们的布局文件或动态添加到我们的Activity中,通过设置XML或者代码配置WebView的属性,比如布局位置、大小等。

一般来说,使用布局文件的方式可以减少Activity代码量,提高可读性。示例代码如下:


<WebView 
  android:id="@+id/webview"
  android:layout_width="match_parent"
  android:layout_height="match_parent" /

接着,我们需要在Activity中找到该组件并进行初始化。除了常见的findViewById之外,使用加载HTML、Web页面和本地文件的setVisibility方法设置WebView的可见性。示例代码如下:


WebView webView = (WebView) findViewById(R.id.webview);
webView.setVisibility(View.VISIBLE);

二、用WebChromeClient实现进度条

使用WebChromeClient类可以实现WebView的进度条效果,该类为WebView安卓提供了官方的Web视图界面组件,其中包含一个内置的进度条,可以在WebView加载页面时,显示加载进度。示例代码如下:


webView.setWebChromeClient(new WebChromeClient() {
  @Override
  public void onProgressChanged(WebView view, int newProgress) {
      setProgress(newProgress * 100); //修改Activity的进度
  }
});

在上面的代码中,我们重写了onProgressChanged方法,在里面改变了Activity的进度值,就可以实现一个简单的进度条效果了。

三、使用WebSettings配置WebView的属性

WebSettings类是WebView的一个属性管理器,可以用来配置WebView的各种属性。比如,我们可以通过WebSettings设置是否支持JavaScript、启用缓存、启用DOM存储等。示例代码如下:


WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true); //启用JavaScript支持
webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); //启用缓存
webSettings.setDomStorageEnabled(true); //启用DOM存储

webSettings有非常多的方法,可以满足我们对WebView的各种需求,需要根据实际情况来设置。

四、使用WebViewClient加载页面

WebViewClient类可以管理WebView的各种状态,我们可以继承这个类,以方便地加载页面,处理错误,等等。示例代码如下:


webView.setWebViewClient(new WebViewClient() {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, String url) {
      view.loadUrl(url); //在当前WebView上打开链接
      return true;
  }
});

我们在shouldOverrideUrlLoading方法中,返回true并以当前的WebView打开链接。但是,此时我们还不能在WebView中加载网页,需要在Activity中的onCreate方法中手动调用loadUrl方法,传入需要加载的链接。示例代码如下:


WebView webView = (WebView) findViewById(R.id.webview);
webView.setVisibility(View.VISIBLE);
webView.loadUrl("http://www.example.com");

五、使用JavaScript交互

如前面所提到的,WebView内置了JavaScript引擎,我们可以利用这个引擎和JavaScript代码来实现WebView和原生代码之间的交互。比如,我们可以通过JavaScript代码获取当前页面的标题,或者从原生代码向WebView中注入JavaScript代码。示例代码如下:


webView.loadUrl("javascript:alert(document.title)"); //从原生代码向WebView中注入JavaScript代码
webView.setWebViewClient(new WebViewClient(){
  @Override
  public void onPageFinished(WebView view, String url) {
      view.loadUrl("javascript:alert(document.title)"); //从WebView中获取当前页面的标题
  }
});

可以看到,通过将需要执行的JavaScript代码前缀为"javascript:",然后通过WebView.loadUrl方法或者WebViewClient.onPageFinished回调函数,将JavaScript代码注入到WebView中,即可实现JavaScript和原生代码之间的交互。

六、WebApi调用

通过WebView的loadUrl方法,我们可以访问互联网,调用WebApi来实现丰富多彩的功能。具体方式是,将需要访问的WebApi链接作为参数,传入loadUrl方法即可。示例代码如下:


webView.loadUrl("http://api.example.com/api/v1/user_info?user_id=123456"); //通过WebView的loadUrl方法调用WebApi

需要注意的是,应该让WebView在子线程中加载链接。如果链接需要输入数据,则可以通过POST方式传递数据。示例代码如下:


String postData = "user_name=admin&user_pwd=123456";
webView.postUrl("http://api.example.com/api/v1/login", postData.getBytes()); //通过POST方式调用WebApi

七、总结

本文简单介绍了Android中WebView的原理和用法,包括创建和初始化、实现进度条、配置属性、加载页面、JavaScript交互和WebApi调用。由于WebView是一个十分重要的组件,开发者应该学习并掌握其用法,尤其是在需要将网页嵌入应用中,或实现WebApi功能时,是不可或缺的。

Android WebView原理和用法详解

2023-05-14
Android JSBridge实现原理和使用方法

一、什么是Android JSBridge Android JSBridge是一种可以实现Android应用与H5页面之间相互通信的桥梁技术。通过JSBridge,H5页面可以调用Android应用中

2023-12-08
Android WebView详解

2023-05-17
提高网页流量的方法:Android WebView和Java

2023-05-17
js和webview,Js和webview交互

2022-11-23
Android WebView:让原生应用也能浏览网页

一、什么是Android WebView WebView是Android系统自带的一个控件,它可以让我们在原生应用中嵌入Web页面,从而让我们的应用也能够浏览网页。 WebView不仅仅是一个可视化控

2023-12-08
js调用android原生代码,js调用Android

本文目录一览: 1、Android AgentWeb Android和Js交互 2、JS怎样调用Android本地原生方法 3、原生APP中js怎样与Android和ios进行交互 4、JS 调用an

2023-12-08
Android WebView的使用

2023-05-24
Android JS交互详解

2023-05-21
Android WebView与JavaScript互动的实

一、WebView类及其内置函数 WebView是Android提供的一个可以用来展示网页的控件,能够很好地兼容各种网页,例如HTML5、js和CSS等。除了展示网页,WebView还可以和JavaS

2023-12-08
Android开发中JS调用原生方法的实现

2023-05-14
Android启动白屏问题详解

2023-05-18
android使用pdf.js,android使用的数据库

本文目录一览: 1、基于android如何读取pdf文件 2、android pdf如何实现发大后下一页 3、WebView做的浏览器,为什么使用pdf.js播放pdf文档时应用会崩溃 4、pdf.j

2023-12-08
android的js框架(android js引擎)

本文目录一览: 1、Android真的推荐用MVI模式?MVI和MVVM有什么区别? 2、在Android上怎样实现JAVA和JS交互 3、android 混合开发 用什么框架好 4、Android如

2023-12-08
webview交互js,webview html5

本文目录一览: 1、iOS下webView和JS交互 2、iOS中WkWebView与js交互 3、android中webview与js交互 iOS下webView和JS交互 下面说一下使用方法 申明

2023-12-08
android缓存htmljs,Android缓存 Xama

本文目录一览: 1、android 怎样获取webview的缓存 2、android不清缓存js不生效,js调用不到是为什么?求大神帮忙 3、Android的webview里怎么用HttpRespon

2023-12-08
Android WebView加载本地HTML

2023-05-24
webview禁用js,webview禁用复制

2022-11-24
安卓Webview全方位介绍

2023-05-18
如何为Android WebView添加头信息以提高页面加载

2023-05-14