文章目录
一、WebView是什么?
WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。
二、WebView的作用
(1)显示和渲染网页;
(2)可与页面JavaScript交互,实现混合开发。
三、使用步骤
1.使用WebView之前,需在AndroidManifest.xml文件中声明访问网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.加载页面的方式
加载页面一般有以下两种形式:
//方式一:加载一个网页
webView.loadUrl("http://www.baidu.com");
//方式二:加载应用资源文件内的网页
webView.loadUrl("file:///android_asset/test.html");
四、示范程序
(1)使用WebView加载本地文件
A:新建一个本地test.html文件
创建步骤:
a:创建assets文件夹
b:在生成的assets文件夹下创建test.xml文件
<html>
<title>本地HTML</title>
<script>
function changetxt(val){
document.getElementById("txt").innerHTML=val;
}
</script>
<body>Hello World</body><p id="txt"></p>
</html>
B:在项目的布局文件中填入WebView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="15dp">
<WebView
android:id="@+id/wb"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
效果图:
C:在Java代码中填写
package com.example.upclass;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
public class MainActivity_10_19 extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_10_19);
webView = findViewById(R.id.wb);
//要支持JS,否则一些网页不能正常加载
webView.getSettings().setJavaScriptEnabled(true);
//加载本地HTML 文件路径是固定的
webView.loadUrl("file:///android_asset/test.html");
}
}
运行效果图:
(2)使用WebView加载网页文件
A:将加载本地文件的语句改为以下即可
webView.loadUrl("http://www.baidu.com");
注意:
如果直接用上面的语句来加载网页,很有可能会弹出系统浏览器进行网页访问,这样使用体验就会很差!解决办法是在loadUrl()之前加上这样一句代码:
//这样写就继续在WebView中继续打开链接
webView.setWebViewClient(new WebViewClient());
完整代码:
public class MainActivity_10_19 extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_10_19);
WebView webView = (WebView)findViewById(R.id.wb);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
}
}
(3)WebView的两个常用方法
webView.setWebViewClient(new WebViewClient());
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
作用:是当从一个网页跳转到另外一个网页时,我们希望目标网页仍然在当前的webview中显示,而不是在浏览器中打开 //如果没有webView.setWebViewClient(new WebViewClient());这句,该网页会在手机自带的浏览器中打开。
webView.setWebChromeClient(new WebChromeClient());
作用:用来设置更加丰富的处理效果,比如JS、进度条等
实例:
webView.setWebViewClient(new WebViewClient() {
//当页面开始加载
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("WebView", "onPageStarted...");
}
//当页面完成加载
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("WebView", "onPageFinished...");
/* 这两条语句可以设置一个当页面加载完成时,弹出一个框
小广告就是这样来的
webView.loadUrl("javascript:alert('hello')");
webView.evaluateJavascript("javascript:alert('hello')", null);
*/
}
});
小广告图示:
webView.setWebChromeClient(new WebChromeClient() {
//监听到进度 可以用于设置一个进度条
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
Log.d("MainActivity", String.valueOf(newProgress));
}
//可以获取网页的标题
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
setTitle(title);
}
});
五、总结
码农不易,看完啦,点个赞再走吧!