小白开发程序之路(2-12)WebView

知识点

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>

效果

在这里插入图片描述

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页