热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓开发之WebView的使用

文章预览前言1.什么是WebView?2.相关方法一、WebView简单使用1.1、环境准备1.2、MyWebChromClient.java1.3、MyWebVie


文章预览

  • 前言
    • 1.什么是WebView?
    • 2.相关方法
  • 一、WebView简单使用
    • 1.1、环境准备
    • 1.2、MyWebChromClient.java
    • 1.3、MyWebViewClient
    • 1.4、MainActivity.java
    • 1.5、activity_main.xml
  • 二、效果预览


前言


1.什么是WebView?

Android内置webkit内核的高性能浏览器,而WebView则是在这个基础上进行封装后的一个 控件,WebView直译网页视图,我们可以简单的看作一个可以嵌套到界面上的一个浏览器控件!


2.相关方法

参考文章
https://www.runoob.com/w3cnote/android-tutorial-webview.html


一、WebView简单使用


1.1、环境准备

加入网络访问权限

<uses-permission android:name&#61;"android.permission.INTERNET"/>

创建一个assets文件夹用来放html网页或者一些不用编译的文件
在这里插入图片描述
在这里插入图片描述

放入一个html文件&#xff0c;如图所示

在这里插入图片描述


1.2、MyWebChromClient.java

继承WebChromeClient

package cn.zzuli.mywebview;import android.app.Activity;
import android.content.Context;
import android.webkit.WebChromeClient;
import android.webkit.WebView;public class MyWebChromClient extends WebChromeClient {private Activity mActivity;public MyWebChromClient(Activity mActivity) {this.mActivity &#61; mActivity;}/*** 设置网页加载的进度条* &#64;param view* &#64;param newProgress*/&#64;Overridepublic void onProgressChanged(WebView view, int newProgress) {super.onProgressChanged(view, newProgress);}/*** 设置网页标题* &#64;param view* &#64;param title*/&#64;Overridepublic void onReceivedTitle(WebView view, String title) {super.onReceivedTitle(view, title);
// 必须在Activity的页面中设置mActivity.setTitle(title);}
}

1.3、MyWebViewClient

继承WebViewClient

package cn.zzuli.mywebview;import android.graphics.Bitmap;
import android.util.Log;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;public class MyWebViewClient extends WebViewClient {private WebView mwebView;public MyWebViewClient(WebView mwebView) {this.mwebView &#61; mwebView;}/*** 设置不用本机的浏览器进行加载* &#64;param view* &#64;param request* &#64;return*/&#64;Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {view.loadUrl(request.getUrl().toString());return true;}/*** 点击的页面开始* &#64;param view* &#64;param url* &#64;param favicon*/&#64;Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);Log.d("webView","onPageStarted...");}/*** 点击的页面加载完成* &#64;param view* &#64;param url*/&#64;Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);Log.d("webView","onPageFinished...");//使用JS代码
// mwebView.loadUrl("Javascript:alert(&#39;韭菜盖饭!&#39;)");mwebView.evaluateJavascript("Javascript:alert(&#39;韭菜盖饭!&#39;)",null);}
}

1.4、MainActivity.java

package cn.zzuli.mywebview;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebView;public class MainActivity extends AppCompatActivity {private WebView mwebView;&#64;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mwebView &#61; findViewById(R.id.wv);//加载本地网页mwebView.loadUrl("file:///android_asset/test.html");//加载网络页面mwebView.getSettings().setJavascriptEnabled(true);//设置自定义的MyWebViewClientmwebView.setWebViewClient(new MyWebViewClient(mwebView));//设置自定义的MyWebChromClientmwebView.setWebChromeClient(new MyWebChromClient(this));//本地写一些JS代码&#xff0c;网页端进行调用
// mwebView.addJavascriptInterface();mwebView.loadUrl("https://m.baidu.com/"); //地址为百度移动站点}/*** 解决退出网页却直接退出Activity的问题* &#64;param keyCode* &#64;param event* &#64;return*/&#64;Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode &#61;&#61; KeyEvent.KEYCODE_BACK && mwebView.canGoBack()){mwebView.goBack();return true;}return super.onKeyDown(keyCode, event);}
}

1.5、activity_main.xml

布局文件就包含了一个WebView组件


<LinearLayout xmlns:android&#61;"http://schemas.android.com/apk/res/android"xmlns:app&#61;"http://schemas.android.com/apk/res-auto"xmlns:tools&#61;"http://schemas.android.com/tools"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"tools:context&#61;".MainActivity"><WebViewandroid:id&#61;"&#64;&#43;id/wv"android:layout_width&#61;"match_parent"android:layout_height&#61;"match_parent"/>LinearLayout>

二、效果预览

在这里插入图片描述


推荐阅读
  • 本文将介绍如何在混合开发(Hybrid)应用中实现Native与HTML5的交互,包括基本概念、学习目标以及具体的实现步骤。 ... [详细]
  • 本文介绍了如何使用Python爬取妙笔阁小说网仙侠系列中所有小说的信息,并将其保存为TXT和CSV格式。主要内容包括如何构造请求头以避免被网站封禁,以及如何利用XPath解析HTML并提取所需信息。 ... [详细]
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • malloc 是 C 语言中的一个标准库函数,全称为 memory allocation,即动态内存分配。它用于在程序运行时申请一块指定大小的连续内存区域,并返回该区域的起始地址。当无法预先确定内存的具体位置时,可以通过 malloc 动态分配内存。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • JVM钩子函数的应用场景详解
    本文详细介绍了JVM钩子函数的多种应用场景,包括正常关闭、异常关闭和强制关闭。通过具体示例和代码演示,帮助读者更好地理解和应用这一机制。适合对Java编程和JVM有一定基础的开发者阅读。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
author-avatar
猥琐叔装嫩小孩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有