• Android WebView的使用


    WebView是View的一个子类,使用它可以在App中嵌入H5页面,可以跟js互相调用。

    webview有两个方法:setWebChromeClient和setWebClient

    setWebClient:主要处理解析、渲染网页等浏览器做的事情

    setWebChromeClient:辅助WebView处理JavaScript的对话框,网站图标、网站title和加载进度等

    WebViewClient就是帮助WebView处理各种通知、请求事件

    使用WebView的时候,必须在AndroidManifest.xml设置访问网络权限:

        <uses-permission android:name="android.permission.INTERNET" />

    控件

        <WebView
            android:id="@+id/webView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"></WebView>

    用途一:加载本地/Web资源

    使用WebView的loadUrl()方法

    1、加载本地资源

    webView = (WebView) findViewById(R.id.webView);
    webView.loadUrl("file:///android_asset/example.html");

    2、加载web资源

    webView = (WebView) findViewById(R.id.webView);
    webView.loadUrl("http://baidu.com");

    用途二:在app里面直接打开网页

    创建一个WebViewClient,通过setWebViewClient关联

    webView.setWebViewClient(new WebViewClient(){
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);
            return  true;
        }
    });

    用途三:如果访问的页面中有Javascript,则webview必须设置支持Javascript

    //启用支持javascript
    WebSettings settings = webView.getSettings();
    settings.setJavaScriptEnabled(true);

    用途四:如果希望浏览网页时后退不是退出浏览器,则需要WebView覆盖URL加载,自动生成历史访问记录

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
        if ((keyCode == android.view.KeyEvent.KEYCODE_BACK) && webView.canGoBack())
        {
            // 返回键退回
            webView.goBack();
            return true;
        }
        // If it wasn't the Back key or there's no web page history, bubble up
        // to the default
        // system behavior (probably exit the activity)
        return super.onKeyDown(keyCode, event);
    }

    用途五:判断页面加载过程

    webView.setWebChromeClient(new WebChromeClient() {
        @Override
        public void onProgressChanged(WebView view, int newProgress) {
            // TODO Auto-generated method stub
            if (newProgress == 100) {
                // 网页加载完成
    
            } else {
                // 加载中
    
            }
    
        }
    });

    用途六:使用缓存

    优先使用缓存

    webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

    不使用缓存

    webView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

    webSetting的其它常用设置:

    setJavaScriptEnabled(true);  //支持js
    setPluginsEnabled(true);  //支持插件 
    setUseWideViewPort(false);  //将图片调整到适合webview的大小 
    setSupportZoom(true);  //支持缩放 
    setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局  
    supportMultipleWindows();  //多窗口 
    setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);  //关闭webview中缓存 
    setAllowFileAccess(true);  //设置可以访问文件 
    setNeedInitialFocus(true); //当webview调用requestFocus时为webview设置节点
    webview webSettings.setBuiltInZoomControls(true); //设置支持缩放 
    setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 
    setLoadWithOverviewMode(true); // 缩放至屏幕的大小
    setLoadsImagesAutomatically(true);  //支持自动加载图片

     程序猿必读

  • 相关阅读:
    编译内核时出现drivers/mfd/mxchdmicore.c:36:24: fatal error: mach/clock.h: No such file or directory
    IE中iframe标签显示在DIV之上的问题解决方案
    Linux驱动学习1.hello world;
    Maven安装与配置(转)
    Jmeter阶梯式压测
    Jmeter的分布式测试
    adb connect命令连接多个Android设备
    Linux当中文件的显示命令
    软件测试流程
    测试时间不够,该怎么办?
  • 原文地址:https://www.cnblogs.com/longzhongren/p/6128624.html
Copyright © 2020-2023  润新知