Android开发入门组件(十)——WebView

2023-11-03

今天主要写一下WebView,主要是在安卓应用的页面来加载或者写入网页,是比较常见的一种操作。

 

加载网页

1.加载url(网络或者本地assets文件下的html文件)

(1)加载网络url

webview.loadUrl("相应的网址");

直接在activity直接加载网络地址即可使用

对应的activity代码如下:

public class WebViewActivity extends AppCompatActivity {
    WebView wb1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        wb1=findViewById(R.id.wb1);
        wb1.getSettings().setJavaScriptEnabled(true);
        wb1.loadUrl("https://m.baidu.com");
        //加载网络html
    }
}

效果如图所示:

(2)加载本地assets文件下的html文件

webview.loadUrl("相应的文件地址");

注意:直接在main文件夹下面新建一个folder,如图,然后在生成的文件夹下面写进html文件

在新建的写入一个html

代码如下:

<html>
hello world
</html>

然后在对应的activity中加载文件

public class WebViewActivity extends AppCompatActivity {
    WebView wb1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        wb1=findViewById(R.id.wb1);
        wb1.loadUrl("file:///android_asset/hello.html");
        //加载本地html文件hello.html  
    }
}

对于文件地址的选取,按照上面的来即可,只不过html的文件名因人而异,其他一致

2.加载html代码

webview.loadData();

或者webview.loadDatawithBaseUrl();

3.native和JavaScript相互调用

网页的前进后退

(1)网页是可以返回的webview.canGoBack()

(2)网页进行返回webview.goBack()

(3)网页是可以前进的webview.canGoForward()

(4)网页进行前进webview.goForward()

(5)网页是可以返回或者前进steps步的webview.canGoBackOrForward(int steps)

(6)网页返回或者前进steps步webview.goBackOrForward(int steps)

 

 

返回问题:对于进入某个页面之后欧需要返回到上一界面,但是返回之后直接退出了当前的activity,需要重新定义函数

onKeyDown函数

代码如下:
package com.example.scrollview;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.os.Build;
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 {
    WebView wb1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        wb1=findViewById(R.id.wb1);
        wb1.getSettings().setJavaScriptEnabled(true);
        wb1.loadUrl("https://m.baidu.com");
        //加载网络html
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode==KeyEvent.KEYCODE_BACK&&wb1.canGoBack()){
            wb1.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

 

还有一些常用的函数,需要调用类,具体看代码注解,只有部分常用函数的说明

package com.example.scrollview;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
import android.os.Build;
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 {
    WebView wb1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        wb1=findViewById(R.id.wb1);
        //wb1.loadUrl("file:///android_asset/hello.html");
        //加载本地html文件hello.html
        wb1.setWebViewClient(new MyWebViewClient()); //调用类
        wb1.setWebChromeClient(new MyWebChromeClient()); //调用类
        wb1.getSettings().setJavaScriptEnabled(true);
        wb1.loadUrl("https://m.baidu.com");
        //加载网络html
    }
    class MyWebViewClient extends WebViewClient{
        @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
            view.loadUrl(request.getUrl().toString());
            return true;
        }
        @Override
        //在网络页面加载之前调用的函数
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
            super.onPageStarted(view, url, favicon);
            Log.d("webview","onPageStarted");
        }
        @RequiresApi(api = Build.VERSION_CODES.KITKAT)
        @Override
        //在网络页面加载之后调用的函数
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            Log.d("webview","onPageStarted");
            //wb1.loadUrl("javascript:alert('hello')");
            wb1.evaluateJavascript("alert('hello')",null); //jsp代码调用
        }

    }
    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);
        }
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {

        if (keyCode==KeyEvent.KEYCODE_BACK&&wb1.canGoBack()){
            wb1.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android开发入门组件(十)——WebView 的相关文章

  • putExtra() 和 setData() 之间的区别

    putExtra 和 setData 有什么区别 我已经阅读了 android 文档 但没有太大帮助 还有之前的一个问题Intent setData 与 Intent putExtra https stackoverflow com que
  • 如何在android中批量插入sqlite

    我正在使用 SQLiteOpenHelper 进行数据插入 我需要插入2500个id和2500个名字 所以花费了太多时间 请任何人帮助我如何减少插入时间 我们可以一次插入多条记录吗 任何人都可以帮助我 先感谢您 代码 public clas
  • app-release-unsigned.apk 未签名

    我在 github 上下载了 Android 应用程序的 zip 文件 并尝试运行它 但出现一个包含此消息的对话框 app release unsigned apk is not signed Please configure the si
  • 当前版本的Android Gradle插件不支持按需配置

    升级到 Android Studio 3 1 2 后 出现以下错误 当前版本的 Android Gradle 插件不支持按需配置 因为您使用的是 Gradle 4 6 或更高版本 建议 通过在 gradle properties 文件中设置
  • Android 片段之间的阴影分隔符

    我有一个类似于平板电脑的 ICS Gmail 应用程序的布局 ListFragment左边是内容 右边是内容 我想知道如何构建布局 使两个片段之间有一个阴影分隔符 就像在 Gmail 应用程序中一样 如下所示 另外 由于这适用于这个问题 我
  • android.view.InflateException:二进制 XML 文件行 #11:膨胀类 ImageView 时出错

    我只是尝试制作一个小的 android java xml 应用程序来计算游戏的分数 它给了我这个错误 Error inflateing class ImageView 有人知道解决方案吗 我实际上搜索了 ppl 说添加这个 android
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • 如何在 Android Studio 中构建项目测试目录?

    目前还没有这方面的约定 但是现在我如何构建 Android Studio 的测试目录呢 Android 测试基础 http developer android com tools testing testing android html页面
  • 合并 dex 程序类型已存在时出错:android.support.v4.os.ResultReceiver$MyResultReceiver

    合并dex时出错 以下是依赖项 ext anko version 0 10 5 support lib 1 0 0 alpha1 room lib 1 1 0 dependencies implementation org jetbrain
  • java.net.ProtocolException:流意外结束

    我面临一个奇怪的问题 并且无法调试它 我已经实现了上传数据流的逻辑 并使用 Volley 来实现相同的功能 我在HurlStack addBodyIfExistsapi 以便可以处理 application octet stream 类型的
  • Android 媒体播放器搜索栏

    我有一个创建 播放和处理媒体播放器 只是音频 的服务 但我在主要活动中有一个搜索栏 我想自然地显示音频文件的进度并允许用户搜索到不同的位置 我花了很长时间才弄清楚 将 UI 中的搜索栏连接到服务中的媒体播放器的最佳或正确方法是什么 我将这样
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • 将触摸事件从 NestedScrollView 传递到父视图

    我在 NestedScrollView 下方有一个 ViewPager 宽度一些顶部填充 以及 ClipToPadding false 和透明背景 如图像 我的 ViewPager 无法获取触摸事件并且无法工作 我怎么解决这个问题 我无法更
  • 如何获取小区广播消息?

    我尝试像模拟人生一样获取小区广播消息的文本 但它不起作用 public class SMSReceiver extends BroadcastReceiver Override public void onReceive Context c
  • 通知操作而不启动新活动?

    我计划提供一个包含两个操作的提醒通知 一个用于批准登录请求 一个用于拒绝登录请求 通过单击这些操作中的任何一个 我希望向我的服务器发出 HTTP 请求 最重要的是 我不想启动新的 Activity 或根本不想将用户重定向到我的应用程序 Co
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 如何检测日期选择器对话框的取消单击?

    我正在使用以下 日期选择器的示例 http developer android com guide tutorials views hello datepicker html http developer android com guide
  • Android - 如何简单地拖放按钮?

    我在这里找到了一个适合初学者的教程 http androidrox wordpress com 2011 05 13 android sample app drag and drop image using touch http andro
  • 如何减少 Android 中浮动 editText 提示和 editText 框之间的空间?

    我有一个带有浮动提示的 EditText 但我想知道如何减少浮动提示和 EditText 框之间的空间 现在我的用户界面看起来像https i stack imgur com ltfra jpg https i stack imgur co
  • Android 版本低于 Lollipop 时出现 java.lang.NoClassDefFoundError

    我有一台运行 Android 21 的 Nexus 5 设备 我正在测试我的项目 没有任何问题 但是 如果我使用 Google API 19 在模拟器上进行测试 则会显示错误java lang NoClassDefFoundError 如果

随机推荐

  • 字符串专题-LeetCode:剑指 Offer 58 - II. 左旋转字符串、LeetCode 459.重复的子字符串、 代码思路和注意点

    文章目录 一 剑指 Offer 58 II 左旋转字符串 二 LeetCode 459 重复的子字符串 一 剑指 Offer 58 II 左旋转字符串 思路 预留出n个字符空间s resize s size n 把前n个字符存在s的最后面
  • 傅里叶变换、拉普拉斯变换的应用

    引言 傅里叶变换和拉普拉斯变换的一些认识 背景 电路分析中 本质上是想求解输入与输出的时域变化关系 但复杂的动态 暂态 电路难以直接得到两者的时域关系 需要求解时域微分方程 所以可以将时域转化成频域或复频域 即对时域微分方程做变换再求解 得
  • 像花椒,映客,来疯这种直播app,技术实现难度在哪?需要什么样技术人才,还有就是服务器带宽要求及成本?

    宋少东 287 人赞同 技术层面 技术相对都比较成熟 设备也都支持硬编码 IOS还提供现成的 Video ToolBox框架 可以对摄像头和流媒体数据结构进行处理 但Video ToolBox框架只兼容8 0以上版本 8 0以下就需要用x2
  • 同一域名出现部份地址跨域问题

    同一域名出现部份地址跨域问题 1 首先我确定我的nginx是做了处理的 允许跨域请求 2 百度了一下说是有options的问题 于是就加上了这样一句代码 3 实在没办法了感觉要吸氧了 最后就只能对比以前可以访问的接口来看为啥不行了 一看不要
  • 【目标检测】output with shape [1, 300, 300] doesn‘t match the broadcast shape [3, 300, 300]

    问题描述 训练SSD网络时报错 RuntimeError output with shape 1 300 300 doesn t match the broadcast shape 3 300 300 导致原因 数据集中存在单通道图片 解决
  • IT项目管理第四次作业

    一 你联合同学做一个年级微信公众号加强各班相互了解 联合活动 等 请编制项目章程和项目管理计划 指导该项目实施与运营 必须包含 WBS 和 甘特图 项目章程 项目名称 中山大学17级微信公众号 项目起止时间 2020年6月3日 2020年8
  • Spark大数据分析与实战笔记(第一章 Scala语言基础-2)

    文章目录 章节概要 1 2 Scala的基础语法 1 2 1 声明值和变量 1 2 2 数据类型 1 2 3 算术和操作符重载 1 2 4 控制结构语句 1 2 5 方法和函数 章节概要 Spark是专为大规模数据处理而设计的快速通用的计算
  • Mac 软件汉化教程(一)

    本篇教程旨在提供入门级汉化教程 意思就是最简单的 软件汉化也不是什么很神秘和高大上的事情 任何人都可以做汉化 主要工作就是找到软件需要汉化的英文字符串 再将其翻译成中文 当然 Mac 软件的汉化难易程度大不相同 大致可以分成三种 1 简单好
  • 解决OBS在Linux下无法录屏

    Linux下OBS无法录屏问题解决 因为OBS依赖Pipewire服务 所以就需要安装额外的依赖 sudo apt install pipewire pipewire pulse wireplumber
  • Pikachu (xss跨站脚本攻击)

    目录 xss概念 一 反射型 xss get 二 反射型 post 三 存储型 四 DOM型 五 xss盲注 六 xss之过滤 七 xss之htmlspecialchars 1 htmlspecialchars作用 flags 八 xss之
  • 基于openswan klips的IPsec实现分析(五)应用层和内核通信(2)

    基于openswan klips的IPsec实现分析 五 应用层和内核通信 内核操作 转载请注明出处 http blog csdn net rosetta 在数据发送一节讲过 加载模块时会执行pfkey init 初始化与用户层通信的PF
  • C++ stack容器详解

    C stack容器 stack容器的基本概念 stack的常用接口 1 构造函数 2 赋值操作 3 数据存取 4 大小操作 测试 stack容器的基本概念 stack是一种先进先出的数据结构 被称为栈 它只有一端可以出入 栈中进入数据称为
  • IO读写实例

    基本类型的读写 import java io public class TestDataStream public static void main String args throws IOException OutputStream o
  • SSE2的一些常用指令集介绍

    开门见山 前段时间学习OpenCV的FAST算法 中间有很多SSE2的指令集 深受其惑 下面我把学习过程中学到的一些指令集介绍给大家 希望能对大家有所帮助 m128i被称为128bits的整数 对其进行赋值时 可以调用 m128i mm s
  • MMKV原理详解

    性能对比 我们将 MMKV 和 SharedPreferences SQLite 进行对比 重复读写操作 1k 次 相关测试代码在Android MMKV mmkvdemo 结果如下图表 单进程性能 可见 MMKV 在写入性能上远远超越 S
  • 三、nginx两种压缩配置[gzip]

    一 nginx压缩 解释 通过配置参数 让nginx压缩指定后缀格式文件 然后发送给用户 但是这样这些压缩文件无法使用sendfile的高效传送 使用其能使得文件传输不经过程序 加载到缓存直接发送 相反off的话 需要在硬盘 缓存 程序 发
  • [Python人工智能] 十四.循环神经网络LSTM RNN回归案例之sin曲线预测

    从本专栏开始 作者正式开始研究Python深度学习 神经网络及人工智能相关知识 前一篇文章详细讲解了如何评价神经网络 绘制训练过程中的loss曲线 并结合图像分类案例讲解精确率 召回率和F值的计算过程 本篇文章将分享循环神经网络LSTM R
  • java文件的上传和下载_java文件上传和下载

    在web项目中上传文件夹现在已经成为了一个主流的需求 在OA 或者企业ERP系统中都有类似的需求 上传文件夹并且保留层级结构能够对用户行成很好的引导 用户使用起来也更方便 能够提供更高级的应用支撑 文件夹数据表结构 CREATETABLEI
  • 注解-宋红康

    目录 一 注解 Annotation 概述 二 常见的注解实例 三 如何自定义注解 四 JDK中的四个元注解 五 Java8注解的新特性 1 可重复注解 2 类型注解 一 注解 Annotation 概述 二 常见的注解实例 三 如何自定义
  • Android开发入门组件(十)——WebView

    今天主要写一下WebView 主要是在安卓应用的页面来加载或者写入网页 是比较常见的一种操作 加载网页 1 加载url 网络或者本地assets文件下的html文件 1 加载网络url webview loadUrl 相应的网址 直接在ac