Android 中 WebView 的基本用法详解

 更新时间:2021年01月24日 14:44:48   作者:YKenan  
这篇文章主要介绍了Android 中 WebView 的基本用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

加载 URL (网络或者本地 assets 文件夹下的 html 文件)
加载 html 代码
Native 和 JavaScript 相互调用

加载网络 URL

webview.loadUrl(https://www.baidu.com/);

加载 assets 下的 html 文件

加载 html 代码

// 两个代码差不多
// 偶尔出现乱码
webview.loadData();
// 比上面的好一些, 可以友好解决编码问题
webview.loadDataWithBaseURL();

网页的前进后退

// 网页是否可以后退
webview.canGoBack();
// 网页进行后退
webview.goBack();
// 网页是否可以前进
webview.canGoForward();
// 网页进行前进
webview.goForward();
// 网页是否可以前进/后退 steps 步
webview.canGoBackOrForward(int steps);
// 网页进行前进/后退 steps 步
webview.goBackOrForward(int steps);

执行 JS 代码.

webview.loadUrl("javascript:alert('Hello world!')");
webview.evaluateJavascript("javascript:alert('Hello world!')", null);

2. 加载网页

建立一个最简单的 html 文件

在这里插入图片描述

WebViewActivity

package com.example.hello;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.webkit.WebView;

public class WebViewActivity extends AppCompatActivity {

 // 声明
 private WebView wb;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_web_view);
  // 获取
  wb = findViewById(R.id.wb);
  // 加载本地 html 文件
  wb.loadUrl("file:///android_asset/test.html");
 }
}

activity_web_view

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".WebViewActivity">

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

</RelativeLayout>

在这里插入图片描述

加载网页上的页面

package com.example.hello;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class WebViewActivity extends AppCompatActivity {

 // 声明
 private WebView wb;

 @SuppressLint("SetJavaScriptEnabled")
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_web_view);
  // 获取
  wb = findViewById(R.id.wb);
  // 加载本地 html 文件
//  wb.loadUrl("file:///android_asset/test.html");
  // 加载网页 html 文件
  // 支持 JS 和 DOM
  wb.getSettings().setJavaScriptEnabled(true);
  wb.getSettings().setDomStorageEnabled(true);
  // 防止所有后打开默认浏览器
  wb.setWebViewClient(new MyWebViewClient());
  wb.setWebChromeClient(new MyWebChromeClient());
  wb.loadUrl("https://www.baidu.com/");
 }

 /**
  * 防止返回到之前的 Activity
  *
  * @param keyCode 按键
  * @param event 事件
  * @return true
  */
 @Override
 public boolean onKeyDown(int keyCode, KeyEvent event) {
  if (keyCode == KeyEvent.KEYCODE_BACK && wb.canGoBack()) {
   wb.goBack();
   return true;
  }
  return super.onKeyDown(keyCode, event);
 }

 static class MyWebViewClient extends WebViewClient {
  @Override
  public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
   view.loadUrl(request.getUrl().toString());
   return super.shouldOverrideUrlLoading(view, request);
  }

  @Override
  public void onPageStarted(WebView view, String url, Bitmap favicon) {
   super.onPageStarted(view, url, favicon);
   Log.d("WebViewClient", "Page started...");
  }

  @Override
  public void onPageFinished(WebView view, String url) {
   super.onPageFinished(view, url);
   Log.d("WebViewClient", "Page Finished...");
  }
 }

 /**
  * 添加所有记录和 Title
  */
 class MyWebChromeClient extends WebChromeClient {
  @Override
  public void onProgressChanged(WebView view, int newProgress) {
   super.onProgressChanged(view, newProgress);
  }

  @Override
  public void onReceivedTitle(WebView view, String title) {
   super.onReceivedTitle(view, title);
   setTitle(title);
  }
 }
}

在这里插入图片描述

到此这篇关于Android 中 WebView 的基本用法的文章就介绍到这了,更多相关Android 中 WebView 用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 为什么不要在 Flutter 中使用全局变量

    为什么不要在 Flutter 中使用全局变量

    这篇文章主要介绍了为什么不要在Flutter中使用全局变量,全局变量是公共变量,可以被Flutter程序中的每个方法和对象访问,全局变量是局部变量的替代品,它们在方法中创建并在该方法中访问
    2022-08-08
  • Android实现为图片添加水印

    Android实现为图片添加水印

    这篇文章主要为大家详细介绍了Android实现为图片添加水印的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Android项目实战之仿网易顶部导航栏效果

    Android项目实战之仿网易顶部导航栏效果

    这篇文章主要为大家详细介绍了Android项目实战之仿网易顶部导航栏效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android大图监测系统的三种实现方式

    Android大图监测系统的三种实现方式

    在Android应用中,大图的加载和显示可能导致内存占用过高,进而引发OOM(Out Of Memory)异常,影响应用的稳定性和用户体验,为了更好地管理大图资源,我们需要建立起一套可靠的大图监测系统,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2024-01-01
  • Android实现果冻滑动效果的控件

    Android实现果冻滑动效果的控件

    这篇文章给大家主要介绍了利用Android如何实现果冻效果滑动效果的控件,实现的效果类似于iOS有阻尼效果的滑动控件,一般我们比较亲切地称之为果冻控件,常见的如微信里[我]的那个面板模块,即使没有再多的选项,也不会很生硬的不允许用户滑动。下面来一起看看吧。
    2016-11-11
  • Android中实现词组高亮TextView方法示例

    Android中实现词组高亮TextView方法示例

    高亮显示大家应该都不陌生,在开发中经常会遇到这个需求,所以下面这篇文章主要给大家介绍了关于Android中实现词组高亮TextView的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10
  • android使用SharedPreferences进行数据存储

    android使用SharedPreferences进行数据存储

    Android平台给我们提供了一个SharedPreferences类,它是一个轻量级的存储类,特别适合用于保存软件配置参数。有兴趣的可以了解一下。
    2017-02-02
  • Android高仿京东垂直循环滚动新闻栏

    Android高仿京东垂直循环滚动新闻栏

    通过自定义的LinearLayout,并且textView能够循环垂直滚动,而且条目可以点击,显示区域最多显示2个条目,并且还有交替的属性垂直移动的动画效果,通过线程来控制滚动的实现
    2016-03-03
  • Android提高之XML解析与生成实例详解

    Android提高之XML解析与生成实例详解

    这篇文章主要介绍了Android的XML解析与生成方法,相信对大家的Android项目开发有一定的借鉴参考作用,需要的朋友可以参考下
    2014-08-08
  • 实例讲解Android多线程应用开发中Handler的使用

    实例讲解Android多线程应用开发中Handler的使用

    这篇文章主要介绍了Android多线程应用开发中Handler的使用,Handle主要被用来更新UI和处理消息,需要的朋友可以参考下
    2016-01-01

最新评论