WebView可以实现如下功能:

  • 加载本地assets文件夹下的html文件
    wedview.loadUrl(“file:///android_asset/test.html”);
  • 加载网络URL
    webview.loadUrl(“http://m.baidu.com”);
  • 直接加载HTML代码
    方法一:webview.loadData();
    方法二:webview.loadDataWithBaseURL(); // 方法二比方法一更不容易出现乱码
  • Native和JavaScript相互调用

目录

  • 一、加载本地assets文件夹下的html文件
    • 第一步,在main目录下新建assets目录
    • 第二步,在assets目录下放置要加载的HTML文件
    • 第三步,在activity_main.xml里写一个webview控件
    • 第四步,在MainActivity.java里使用webview控件加载html文件
  • 二、加载网络URL
    • 第一步,在AndroidManifest.xml里写上手机联网权限
    • 第二步,在activity_main.xml里写一个webview控件
    • 第三步,在MainActivity.java里使用webview控件加载URL

一、加载本地assets文件夹下的html文件

第一步,在main目录下新建assets目录


弹出对话框,点击Finish

assets目录就建好了:

第二步,在assets目录下放置要加载的HTML文件

例如下面这个很简单的HTML文件,用记事本写的:

保存为.html格式

一个html文件就写好了:

然后拷贝这个html文件到assets目录下:
        复制你的html文件,然后点击assets目录,ctl+v就复制过去了

第三步,在activity_main.xml里写一个webview控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:orientation="vertical"><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/wv1"></WebView>
</LinearLayout>

第四步,在MainActivity.java里使用webview控件加载html文件

在MainActivity.java里写上wv1.loadUrl(“file:///android_asset/testHtml.html”);

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;public class MainActivity extends AppCompatActivity {private WebView wv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);wv1=findViewById(R.id.wv1);    // 获取控件id// 加载html文件,注意是asset不是assetswv1.loadUrl("file:///android_asset/testHtml.html");    }
}

效果:

二、加载网络URL

第一步,在AndroidManifest.xml里写上手机联网权限

<uses-permission android:name="android.permission.INTERNET" />

第二步,在activity_main.xml里写一个webview控件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_height="match_parent"android:layout_width="match_parent"android:orientation="vertical"><WebViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/wv1"></WebView>
</LinearLayout>

第三步,在MainActivity.java里使用webview控件加载URL

在MainActivity.java里写上wv1.loadUrl(“https://m.baidu.com”); 为什么网址不是www.baidu.com呢,因为m代表这是移动端的网址,www是PC端的网址。

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;public class MainActivity extends AppCompatActivity {private WebView wv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);wv1=findViewById(R.id.wv1);    // 获取控件id// 设置支持JavaScriptwv1.getSettings().setJavaScriptEnabled(true);// 加载网页wv1.loadUrl("https://m.baidu.com");}
}

效果:

问题来了,仅仅是上面那样写,当我们在图中的百度搜索框搜索什么的时候,就不会继续在这个webView里显示,而是会跳转到手机浏览器里去显示。

如何让webView继续显示而不跳转到浏览器里呢?需要在MainActivity.java里重写一些方法:

package com.example.myapplication;import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;public class MainActivity extends AppCompatActivity {private WebView wv1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);wv1=findViewById(R.id.wv1);    // 获取控件idwv1.getSettings().setJavaScriptEnabled(true); // 设置支持JavaScriptwv1.setWebViewClient(new MyWebViewClient());wv1.loadUrl("https://m.baidu.com");  // 加载网页}// 点击界面上的返回键,如果不希望网页关闭,而希望退回网页的上一级,就重写下面这个方法@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(keyCode==KeyEvent.KEYCODE_BACK && wv1.canGoBack()){wv1.goBack();return true;}return super.onKeyDown(keyCode, event);}// 当网页跳转时,让webView继续显示而不跳转到浏览器里class MyWebViewClient extends WebViewClient {// 当页面要跳转时,就会调用下面这个方法@Overridepublic boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {// 在当前webView里继续加载网页view.loadUrl(request.getUrl().toString());return true;}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);}@Overridepublic void onPageFinished(WebView view, String url) {super.onPageFinished(view, url);}}}

效果:

点击进一个网页,不会跳到浏览器,仍在webView中显示:

点击返回键,退回到上一个页面:

Android开发基础之控件WebView相关推荐

  1. Android开发基础之控件EditText

    目录 一.基础属性 二.在提示文本旁添加图片 三.获取EditText内容 四.监听事件 五.制作登录界面 一.基础属性 1.id 设置组件id 2.layout_width 宽度 3.layout_ ...

  2. Android开发基础之控件CheckBox

    目录 一.基础属性 二.自定义样式 1.去掉CheckBox的勾选框 2.自定义背景颜色 3.自定义勾选框的背景图片 三.监听事件 一.基础属性 1.layout_width 宽度 2.layout_ ...

  3. android什么控件能够输入多行文字,Android开发:文本控件详解——EditText(一)基本属性...

    一.简单实例: EditText输入的文字样式部分的属性,基本都是和TextView中的属性一样. 除此之外,EditText还有自己独有的属性. 二.基本属性: hint 输入框显示的提示文本 te ...

  4. android include 控件详解,Android开发中include控件用法分析

    本文实例讲述了Android开发中include控件用法.分享给大家供大家参考,具体如下: 我们知道,基于Android系统的应用程序的开发,界面设计是非常重要的,它关系着用户体验的好坏.一个好的界面 ...

  5. Android - 最基础的控件TextView

    TextView TextView是一个十分简单和基础的控件,相信大家使用TextView主要就是用来显示文字的, 而创建一个项目的时候,页面显示的就一个内容为Hello World 的 TextVi ...

  6. 『安卓』安卓开发基础--基本控件

    1. Textview 显示文字,相当于Panel.一般用来文本展示,继承自android.view.View,在android.widget包中. <TextView//控件id androi ...

  7. 【android开发】 修改控件Spinner内容的字体大小 颜色等属性

    在anadroid开发中遇到此问题: 直接定义的Spinner控件,不能调整内容字体的大小,所以常会 因为控件太小,内容太长而使得不能完全显示,各种搜索,找到如下解决方法!希望对遇到同样问题 的朋友们 ...

  8. android图表控件 坐标,android-charts 基于Java和Android开发的图形图表控件 | 李大仁博客...

    王晓龙 April 8th, 2014 at 09:44 | #1 我再github上看到了你写的控件,给了我很大启发,我现在在做K线图一类的图表,正好用到了您开发的这款控件,但是有些地方使用的不太舒 ...

  9. Android开发 - 实时心率控件图

    数据处理流程: graph LR 心率数据-->心率仓库 心率仓库-->根据采样率获取心率数据 根据采样率获取心率数据--> 打印数据 思路篇: 整个控件分成上下两层.上层画线条,下 ...

最新文章

  1. python canvas画弧度_只要十分钟,python绘图神器turtle了解一下?
  2. phpMyAdmin安全配置
  3. Oracle Data Guard 主库 归档文件 删除策略 .
  4. java feign同时传对象和其他参数_关于Spirng Cloud的Feign传参问题:
  5. 阿里巴巴与清华大学成立联合实验室,探索下一代人机自然交互
  6. Callable与Future的介绍
  7. 交换两个数字的三种方式
  8. 介绍针对企业级Flex开发的开源项目FlexibleShare
  9. 对食材的敬畏之心极致产品_这些数据科学产品组合将给您带来敬畏和启发(2020年中的版本)
  10. python实例 73,74
  11. http.server模块
  12. 恩智浦发布新款跨界处理器
  13. Magic Leap是快出产品的节奏,已开放内容开发者注册通道
  14. SpringBoot2.X + SpringCache + redis解决乱码问题
  15. miui游戏驱动程序偏好设置_MIUI 11 期待吗?MIUI 10这几个小设置,你都了解吗?...
  16. dbutil 1.1.6
  17. FFmpeg WAV文件转换
  18. OpenWrt 安装中文语言包
  19. c语言编写qq机器人软件,未编译的QQ机器人C语言版
  20. Android中高级面试必知必会,绝对干货

热门文章

  1. pgsql 重置自增id起始值
  2. Web完整渗透测试实例
  3. 浙商炒房团转战电脑卖场:广州起步全国布局
  4. 牛逼呀,前端自动化测试框架cypress
  5. opencv把图片序列保存为视频
  6. 皮尔逊波形相似度python代码
  7. python数组维度变换
  8. liunx新服务器安装------------node,jdk,mongodb,redis,activemq,mysql,face-recognition
  9. 科大讯飞2013软件开发(回忆总结版)
  10. 第一章:初识数据库(3):数据库的语言分类