Android第十七天WebView初识



/**
 * WebView :Android 应用程序中加载网页的视图
 * 1.既可以加载外网服务器上的页面,也可以访问加载本地的静态页面
 * 2.基于WebKit内核
 * 3.webView加载的网页会默认缓存到database  cache文件夹下
 * InternalStorage(内部存储)里面的 - 持久化存贮   (第二个月的时候会学到)
 * 4.webView的生命周期-  Activity 的生命周期相对应3 * <p>
 * 这个地方是写java代码的
 *
 * 回顾一下知识点:
 * 1. webView使用loadUrl方法来加载页面
 * 2.默认是会打开手机默认浏览器来加载网页
 * 3.想要在应用程序内打开网页  需要给webView设置 WebViewClient
 * 4.getSettings方法可以获取WebView 的设置选项
 * 5.设置支持 javaScript
 * 6.设置支持缩放
 * 7.设置支持自适应屏幕
 * 8.设置默认字体  1-72
 * 9.设置默认编码格式
 * 10.设置缓存
 * 11.WebViewClient重写方法  (应用程序内打开网页的方法)(开始加载网页的方法)(网页加载结束的方法)(加载资源的方法)(接受错误的方法)
 * 12.设置进度监听  setWebChromeClient
 * 13.三个生命周期 对应Activity的三个生命周期  onResume  onPause  onDestroy
 * 14.监听返回键  webView是否可以回到上一级或者去下一级
 *      canGoBack   goBack
 *      canGoForward  GoForward
 *
 */
public class MainActivity extends AppCompatActivity {

    private WebView webView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //实例化视图对象
        webView = (WebView) findViewById(R.id.webView);
        //获取webView 的设置选项
        WebSettings settings = webView.getSettings();
        //表示使当前的WebView 支持javaScript ××××××!!!!!十分重要的属性
        settings.setJavaScriptEnabled(true);

        //支持缩放
        settings.setSupportZoom(true);
        settings.setDisplayZoomControls(true);
        //支持缩放缩放工具
        settings.setBuiltInZoomControls(true);

        //屏幕自适应
        settings.setUseWideViewPort(true);
        settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
        settings.setLoadWithOverviewMode(true);

        //设置默认字体大小  范围1-72 之间
        settings.setDefaultFontSize(72);

        //设置编码格式
        settings.setDefaultTextEncodingName("utf-8");

        //网页缓存模式
        settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

//        清除缓存文件夹下的缓存信息
//        webView.clearCache(true);
//        //清除历史信息
//        webView.clearHistory();
//        //清除webView 缓存的信息
//        webView.clearFormData();
//如果我想在手机app内部打开这个网页 该怎么办?
        //WebView设置一个WebViewClient 并重写shouldOverrideUrlLoading方法 将网址重新加载一次
        webView.setWebViewClient(new WebViewClient() {

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
                //当页面开始加载的时候执行该方法
                Log.d("TAG", "onPageStarted: 页面开始加载了");
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //当页面加载完成的时候执行该方法
                Log.d("TAG", "onPageFinished: 页面加载完成了");
            }

            @Override
            public void onLoadResource(WebView view, String url) {
                super.onLoadResource(view, url);
                //当页面加载资源的时候执行该方法,每加载一个资源该方法就会执行一次
                Log.d("TAG", "onLoadResource: 加载资源 : " + url);
            }

            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                //接收网页访问错误的方法
            }

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                super.onReceivedSslError(view, handler, error);
                //当访问的网址是 https 协议的时候错误的时候执行这个方法
            }

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //当想要在站内打开这个网页的时候需要重写该方法 !
                view.loadUrl(url);
                return true;
            }
        });
        //设置用于监听webView加载进度的方法
        webView.setWebChromeClient(new WebChromeClient() {

            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
                Log.d("TAG", "onProgressChanged:   " + newProgress);
                //newProgress 表示页面加载的进度
                if (newProgress == 0) {
                    //开始加载
                }
                if (newProgress == 100) {
                    //加载完成
                }
            }
        });
    }

    //WebView生命周期写到对应方法中即可
    @Override
    protected void onResume() {
        super.onResume();
        webView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        webView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        webView.destroy();
    }

    public void onClick(View view) {
        //访问外网服务器的页面
        //在默认情况下  webView打开一个网址,会启动手机默认浏览器来将这个网页打开
        webView.loadUrl("https://www.baidu.com/");
        //访问本地的静态页面 (该静态页面是放在assets文件夹下的 所以使用绝对路径来访问)
//        webView.loadUrl("file:///android_asset/百度一下,你就知道.html");
    }

    //1.监听手机物理返回键
    //重写该方法 该方法能监听到所有Android软键盘 虚拟键盘上的所有按键
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        //判断按下的按钮是不是 返回键
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //如果是返回键 判断 网页是否能够回退
            if (webView.canGoBack()) {
                //如果网页存在上一级 则回到上一级
                webView.goBack();
                //此处一定要返回true 表示消费了这个事件!
                return true;
            }

            //是否可以向前
//            if (webView.canGoForward()){
//                webView.goForward();
//            }
        }

        return super.onKeyDown(keyCode, event);
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值