WebView

WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。

两点需要注意:
1.这是最基本的 AndroidManifest.xml 中必须添加访问网络权限。
2.如果访问的页面中有 Javascript,则 WebView 必须设置支持 Javascript。

使用介绍

  • 载入页面
    有4种方法:
    1.在本地新建assets文件夹,把html文件放里面,访问方式: webView.loadUrl(“file:///android_asset/demo01.html”);
    2.把网页url直接作为参数:
    webView.loadUrl(“https://m.bing.com”);
    3. 也可以直接把html代码作为参数传入
    webView.loadData();
    webView.loadDataWithBaseUrl();

    这两个相比,上面一个有可能出现乱码,下面这个乱码的几率相对低一些

  • onKeyDown() 重写返回键的作用:
    如果需要实现返回键回退上一页的功能就需要重写这个方法,因为默认是退出当前activity。

  • 设置支持js代码读取
    webView.getSettings().setJavaScriptEnabled(true);

  • webView.setWebViewClient(new MyWebViewClient());
    这里需要写一个内部类继承自WebViewClient,里面有几个方法:

    1. shouldOverrideUrlLoading:显示页面加载的进度条
    2. onPageStarted:定义页面开始的时候做些什么
    3. onPageFinished: 定义页面关闭的时候做些什么
  • webView.setWebChromeClient(new MyWebChromeClient());
    参数也需要自定义继承自WebChromeClient,里面的方法:
    1.onProgressChanged():进程改变时做些什么
    2.onReceivedTitle():参数里有正在访问页面的标题,可以把它设置到app的标题上,(app标题默认是项目的名字)

网页的前进后退

  • boolean webview.canGoBack():判断能否返回上一层
  • webview.goBack();返回
  • webview.canGoForward()
  • webview.goForward()
  • webview.canGoBackOrForward(int steps);能否前进或后退多少步,参数是int,正数表示前进,负数表示后退
  • webview.goBackOrForward(int steps);前进steps步。正数前进,负数后退
案例

package com.example.test.webview;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Bitmap;
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;

import com.example.test.R;

public class WebViewActivity extends AppCompatActivity {
    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        webView = findViewById(R.id.wv);
        //加载本地assets文件夹下的html。
        //webView.loadUrl("file:///android_asset/demo01.html");
        webView.setWebViewClient(new MyWebViewClient());
        //加载网络url。手机站点一般是m开头而不是www。下面这句话是设置js正常运行的。不写是不能运行自己写的js代码的
        webView.getSettings().setJavaScriptEnabled(true);
        webView.setWebChromeClient(new MyWebChromeClient());
        webView.loadUrl("https://m.bing.com");
    }

    private class MyWebViewClient extends WebViewClient {
        @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);
            webView.loadUrl("javascript:alert('onPageStarted()')");
            Log.d("webview","onPageStart________________________________________");
        }

        @Override
        public void onPageFinished(WebView view, String url) {
            super.onPageFinished(view, url);
            //载入自己写的js代码
            webView.loadUrl("javascript:alert('onPageFinished()')");

            Log.d("webview","onPageFinished________________________________________");

        }

    }

    @Override
    //重写这个方法,改变返回键的操作,改成退回上一页面。返回键默认退出当前activity
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
            webView.goBack();
            //return true一定不要忘了,不然这段代码完了还会触发默认的监听器,会退出这个页面而不是返回上一页
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    private class MyWebChromeClient extends WebChromeClient {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            super.onProgressChanged(view, newProgress);
        }

        @Override
        //将所打开网页的标题设置到app的标题上
        public void onReceivedTitle(WebView view, String title) {
            super.onReceivedTitle(view, title);
            setTitle(title);
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值