欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android 中 WebView 的基本用法详解

程序员文章站 2024-01-16 15:49:35
加载 url (网络或者本地 assets 文件夹下的 html 文件)加载 html 代码native 和 javascript 相互调用加载网络 urlwebview.loadurl(https:...

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

加载网络 url

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

加载 assets 下的 html 文件

webview.loadurl(file:///android_asset/test.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 文件

Android 中 WebView 的基本用法详解

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>

Android 中 WebView 的基本用法详解

加载网页上的页面

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 的基本用法的文章就介绍到这了,更多相关android 中 webview 用法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!