知识点
1.加载网络URL
webview.loadUrl(“http://www.xxx.cn”);
2.加载assets下的html文件(本地文件)
webview.loadUrl(“file:///xxx.html”);
3.加载html代码
webview.loadData();
webview.loadDataWithBaseURL();(这个乱码可能性更小)
4.网页的前进后退
webview.canGoBack() 当前页面是否能够返回
webview.goBack() 返回
webview.canGoForward() 当前页面是否能够前进
webview.goForward() 前进
webview.canGoBackOrForward(int steps) steps为正则是向前,反之则向后
webview.GoBackOrForward(int steps)
按下返回键,默认是退出当前Activity,如果希望是WebView内页面后退,则需要重写方法onKeyDown:
代码
在主页面加上WebView的例行操作就不贴了
WebViewActivity.java
package com.example.myapplication;
import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.os.Build;
import android.os.Bundle;
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 mWvMain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
mWvMain=findViewById(R.id.wv);
//加载本地HTML
//mWvMain.loadUrl("file:///android_asset/test.html");
//注意这里第一处有三个斜杠,asset没有s
//加载网络URL
mWvMain.getSettings().setJavaScriptEnabled(true);
//支持js代码
mWvMain.loadUrl("https://m.baidu.com");
//一般网站的移动站点都是m.xxx (mobile) www.xxx是PC端的网址
mWvMain.setWebViewClient(new MyWebViewCLient());
mWvMain.setWebChromeClient(new MyWebChormeClient());
}
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);
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onPageFinished(WebView view, String url) {
//页面打开结束时
super.onPageFinished(view, url);
// mWvMain.loadUrl("javascript:alert('hello')");
mWvMain.evaluateJavascript("javascript:alert('hello')",null);
//js方法的两种写法
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//重写返回键 当点击的是返回键且当前WebActivity可返回时,再网页内返回
if(keyCode==KeyEvent.KEYCODE_BACK && mWvMain.canGoBack()){
mWvMain.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
class MyWebChormeClient extends WebChromeClient{
//onProgressChanged 监听进度 可用于显示进度条
//onReceivedTitle 可获得网页的Title
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
setTitle(title);
//将网页title设置为activity的title
}
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
}
}
activity_web_view.xml
<?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">
<WebView
android:id="@+id/wv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>