Android开发: 使用WebView来进行混合开发

Web2Native

方法的使用

WebView使用本地的方法,直接使用是不行的,需要本地进行方法的配置。

1.WebView设置这两句条码

// 允许执行JavaScript脚本
webSettings.setJavaScriptEnabled(true);
//把本类的一个实例添加到js的全局对象window中,"injs"是它的名字
webView.addJavascriptInterface(new InJavaScript(), "injs");

2.JS对象类的设置

final class InJavaScript {
        //若需要方法直接被WebView调用,必须在方法前添加此接口注解
        @JavascriptInterface
        public void web2Native(final String str) {
            handler.post(new Runnable() {
                public void run() {
                    textView.setText(str);
                }
            });
        }
        //若需要方法直接被WebView调用,必须在方法前添加此接口注解
        @JavascriptInterface
        public void test() {

        }
    }
  • Android漏洞原因 SDK 17 以上需要添加一个接口 JavascriptInterface
  • 方法不是在UI线程中执行,注意对UI控件的操作

3.WebView 调用 Native 方法

    <script language="javascript" type="text/javascript">

     //调用android接口并发送数据
    function sendToAndroid(){  
        var str = "the data is from JavaScript!";  
        window.injs.web2Native(str);//通过injs接口调用android的函数
    }
    </script>

提示框等操作

1.提示框操可以通过WebChromeClient 方便实现,设置WebChromeClient

webView.setWebChromeClient(new WebChromeClient() {
            //处理 javascript 中的 alert 弹框,应用程序接管此方法必须返回:true
            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                //构建一个Builder来显示网页中的对话框
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("Alert");
                builder.setMessage(message);
                builder.setPositiveButton(android.R.string.ok, new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.confirm();
                    }
                });
                builder.setCancelable(false);
                builder.create();
                builder.show();
                return true;
            }
        });

2.WebView弹出Dialog操作

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <script language="javascript" type="text/javascript">

    //DialogAlert提醒
    function ale()  
    {  
        //回调WebChromeClient里面的方法
        alert("This is an alert!");  
    }  
    </script>
</head>

<body>
<div><input type="submit" name="Submit" value="alert" onclick="ale()"/></div>

<input type='button' value='get' onClick="alert(window.localStorage['value']+':'+window.localStorage['time'])"/>
</body>

alert(“”);会回调WebChromeClient 里面覆写的onJsAlert方法,这里面可以我们截获后自定义显示Dialog,也可以直接有WebView的内核处理。window.localStorage需要着用这个方法必须设置

webSettings.setDomStorageEnabled(true);

定位

提示框操可以需要对WebChromeClient里面的方法进行覆写

webView.setWebChromeClient(new WebChromeClient() {
    //当前页面请求是否允许H5定位
    public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
    callback.invoke(origin, true, false);
    super.onGeolocationPermissionsShowPrompt(origin, callback);
    }
});

需要GeolocationPermissions.Callback 对象调用invoke(String origin, boolean allow, boolean retain)方法。此方法参数说明:

  • @param origin 权限设置的源地址
  • @param allow 是否允许定位
  • @retain 当前的选择是否让内核记住

并且需要应用程序具有以下权限

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

在Html中的代码:

<script language="javascript" type="text/javascript">

   window.onload = function() {
        get_location();
    }

    //定位操作
    function get_location() {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(show_map,handle_error,{enableHighAccuracy:false,maximumAge:1000,timeout:15000});
        } else {
            alert("Your browser does not support HTML5 geoLocation");
        }
    }

    //展示地图 -- 定位结束后将位置信息显示
    function show_map(position) {
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        var city = position.coords.city;
        document.getElementById("Latitude").innerHTML="latitude:"+latitude;
        document.getElementById("Longitude").innerHTML="longitude:"+longitude;
        document.getElementById("City").innerHTML="city:"+city;
    }
</script>

数据库的操作

提示框操可以需要对WebChromeClient里面的方法进行覆写

webView.setWebChromeClient(new WebChromeClient() {

            public void onExceededDatabaseQuota(String url, String databaseIdentifier, long currentQuota,long estimatedSize, long totalUsedQuota,WebStorage.QuotaUpdater quotaUpdater) {
                quotaUpdater.updateQuota(estimatedSize * 2);
            }
            public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
                quotaUpdater.updateQuota(spaceNeeded * 2);
            }
        });
});

以上方法在 API level 19 被弃用使用,WebView现在使用HTML5 / JavaScript Quota Management API。

HTML中的代码

<script language="javascript" type="text/javascript">

    window.onload = function() {
        initDatabase();
    }

    //初始化数据库
    function initDatabase() {
        try {
            if (!window.openDatabase) {
                alert('Databases are not supported by your browser');
            } else {
                var shortName = 'YARINDB';
                var version = '1.0';
                var displayName = 'yarin db';
                var maxSize = 100000;
                YARINDB = openDatabase(shortName, version, displayName, maxSize);
                createTables();
                selectAll();
            }
        } catch(e) {
            if (e == 2) {
                // Version mismatch.
                console.log("Invalid database version."); 
            } else {
                console.log("Unknown error "+ e +".");
            }
            return;
        }
    }

    //创建数据库表
    function createTables(){
        YARINDB.transaction(
            function (transaction) {
                transaction.executeSql('CREATE TABLE IF NOT EXISTS yarin(id INTEGER NOT NULL PRIMARY KEY, name TEXT NOT NULL,desc TEXT NOT NULL);', [], nullDataHandler, errorHandler);
            }
        );
        insertData();
    }
</script>

Native2Web

方法调用

在Android本地添加一个点击事件

public void native2Web(View view) {
    //调用javascript中的方法,传入string数据
    webView.loadUrl("javascript:getFromAndroid('the data is from android!')");
}

下面是JS的代码

 <script language="javascript" type="text/javascript">

    function getFromAndroid(str){
        document.getElementById("android").innerHTML=str;  
    }
    </script>

这样就实现了Native对Web方法的调用和数据传递。

附一(WebViewClient、WebChromeClient):

WebViewClient主要帮助WebView处理各种通知、请求事件等。

WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等。

实际使用的话,如果你的WebView只是用来处理一些html的页面内容,只用WebViewClient就行了,如果需要更丰富的处理效果,比如JS、进度条等,就要用到WebChromeClient。

WebViewClient

  • boolean shouldOverrideUrlLoading(WebView view, String url)
    • WebView 加载URL的操作,可以截获。比如我们发现跳转到的是一个market的链接,那么我们可以直接跳转到应用市场,或者其他app。
    • onPageStarted( )方法的调用顺序
      • 通过loadUrl的方式重新加载一个URL时,先调用onPageStarted( )
      • 在打开的网址中点击一个link,先调用shouldOverrideUrlLoading( )
      • 注意:shouldOverrideUrlLoading( )方法不是每次都调用,例如
        • 请求的方式为”POST”
        • 返回上一界面
    • 返回值意义:
      • true:WebView 处理url是根据程序来执行的
      • false:webview处理url是在webview内部执行
      • super.shouldOverrideUrlLoading(view, url):跳转至手机浏览器
  • void onPageStarted(WebView view, String url, Bitmap favicon)
    • WebView 加载URL的操作、返回上以界面操作。可以截获
    • 应用标题被要求随当前加载的URL改变,可以再此处处理
  • void onLoadResource(WebView view, String url)
    • 即将加载URL制定的资源
  • void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
    • 当浏览器访问制定的网址发生错误时会通知我们应用程序,比如网络错误
  • boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)
    • 提供应用程序同步一个处理按键事件的机会,菜单快捷键需要被过滤掉。
    • 返回值意义:
      • true:应用程序处理该事件
      • false:webview处理该事件(默认)
  • void onPageFinished(WebView view, String url)
    • 网络加载结束调用
  • void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
    • 当网页加载资源过程中发现SSL错误会调用此方法
  • void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
    • 通知应用程序WebView接收到了一个Http auth的请求
    • 应用程序可以使用supplied 设置webview的响应请求
  • void onScaleChanged(WebView view, float oldScale, float newScale)
    • WebView尺寸发生变化,可调整适配屏幕
  • void onReceivedLoginRequest(WebView view, String realm, String account, String args)
    • 自动登录的帐号过程
    • 参数
      • @param view 请求登陆的webview
      • @param realm 账户的域名,用来查找账户。
      • @param account 一个可选的账户,如果是null 需要和本地的账户进行check, 如果是一个可用的账户,则提供登录。
      • @param args 验证制定参数的登录用户
  • void doUpdateVisitedHistory(WebView view, String url, boolean isReload)
    • 当前访问的url已经生效并被记录在内核当中,可以将此URL放入历史记录了
    • 这个函数在网页加载过程中只会被调用一次。注意网页前进后退并不会回调这个函数
  • void onFormResubmission(WebView view, Message dontResend, Message resend)
    • 浏览器需要重新发送POST
    • 参数:
      • @param view:接收WebViewClient的那个实例,前面看到webView.setWebViewClient(new MyAndroidWebViewClient()),即是这个webview。
      • @param dontResent 当浏览器不需要重新发送数据时,可以使用这个参数。
      • @param resent 当浏览器需要重新发送数据时, 可以使用这个参数。
  • WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request)
    • 通知应用程序内核即将加载url制定的资源,应用程序可以返回本地的资源提供给内核
    • 若本地处理返回数据,内核不从网络上获取数据。
    • 此回调并不一定在UI线程中执行,注意操作View或者私有数据相关的动作。
    • 改变网页的背景,实现网页页面颜色定制化的需求,可在此回调中处理。

WebChromeClient

  • void onProgressChanged(WebView view, int newProgress)
    • 通知应用程序网页加载的进度,一般是顶部一个ProgressBar
  • void onReceivedTitle(WebView view, String title)
    • document 的title变化时的回调
    • 此回调时机取决于网页把title设置在什么位置。title设置在页面前面是会较早回调,大部分网页都在前面。
  • void onReceivedIcon(WebView view, Bitmap icon)
    • 当前页面有个新的favorites icon(网站图标)时候,会回调这个函数。
  • void onShowCustomView(View view, CustomViewCallback callback)
    • 通知应用程序webview需要显示一个custom view,主要是用在视频全屏HTML5Video support。
    • 不是标准H5的video标签,像优酷的视频都是加载flash播放。全屏时不会回调此方法和onHideCustomView
  • void onHideCustomView()
    • 退出视频通知
  • onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg)
    • 请求创建一个新的窗口
    • 如果我们应用程序接管这个请求,必须返回true,并且创建一个新的webview来承载主窗口。
    • 如果应用程序不处理,则需要返回false。(默认)
    • 参数说明:
      • @param view 请求创建新窗口的webview
      • @param isUserGesture 如果是true,则说明是来自用户收拾操作行为,比如用户点击链接
      • @param isDialog true 请求创建的新窗口必须是个dialog,而不是全屏的窗口。
      • @param resultMsg 当webview创建时需要发送一个消息。WebView.WebViewTransport.setWebView(WebView)
    • 具体例子

      • private void createWindow(final Message msg) {
        WebView.WebViewTransport transport = (WebView.WebViewTransport) msg.obj;
        final Tab newTab = mWebViewController.openTab(null, Tab.this, true, true);
        transport.setWebView(newTab.getWebView());
        msg.sendToTarget();
        }
  • void onCloseWindow(WebView window)
    • 通知应用程序从关闭传递过来的WebView并从View Tree中remove。
  • void onRequestFocus(WebView view)
    • webview请求得到focus,发生这个主要是当前webview不是前台状态,是后台webview。
  • boolean onJsAlert(WebView view, String url, String message, final JsResult result)
    • 通知应用程序显示 alert 对话框
    • 参数
      • @param view 接收WebViewClient的那个实例,即那个webview。
      • @param url 当前请求弹出javascript 对话框webview 加载的url地址
      • @param message 弹出的内容信息
      • @result 用来响应用户的处理
    • 返回值
      • true:应用程序处理这个消息
      • false:内核自己处理
  • boolean onJsConfirm(WebView view, String url, String message, final JsResult result)
    • 通知应用程序显示 confirm 对话框
    • 使用同上onJsAlert
  • onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
    • 通知应用程序显示 prompt 对话框
    • 使用同上onJsAlert
    • 注:应用程序接管这个方法,必须调用:result.confirm。
  • boolean onJsBeforeUnload(WebView view, String url, String message, JsResult result)
    • 通知应用程序显示一个对话框,让用户选择是否离开当前页面
    • 返回值意义同上onJsAlert
  • void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback)
    • 当前页面请求是否允许进行定位
    • 需要加入定位权限
    • GeolocationPermissions.Callback的使用
      • callback.invoke(String origin, boolean allow, boolean retain)
      • @param origin 权限设置的源地址
      • @param allow 是否允许定位
      • @retain 当前的选择是否让内核记住
  • void onGeolocationPermissionsHidePrompt()
    • 当onGeolocationPermissionsShowPrompt获取的定位权限被取消,回调此方法通知应用程序隐藏定位相关UI
  • boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams)
    • 当页面需要请求打开系统的文件选择器,则会回调这个方法。
    • 比如我们需要上传图片,请求拍照,邮件的附件上传等等操作。
    • openFileChooser 过期不推荐使用

附二(WebSettings 的方法记录):

方法说明

  • setBuiltInZoomControls (boolean enabled)
    • 是否使用内置的缩放机制。内置的缩放机制包括屏幕上的缩放控件(浮于WebView内容之上)和缩放手势的运用。
    • setDisplayZoomControls(boolean)可以控制是否显示缩放控件,默认值为true。
  • setJavaScriptEnabled (boolean flag)
    • 设置WebView是否允许执行JavaScript脚本,默认false,不允许。
  • setDisplayZoomControls (boolean enabled)
    • 使用内置的缩放机制时是否展示缩放控件,默认值true。参见
  • setAllowFileAccess (boolean allow)
    • 是否允许访问文件,默认允许。
    • 注意,这里只是允许或禁止对文件系统的访问,Assets和resources文件使用file:///android_asset和file:///android_res仍是可访问的。
  • setDomStorageEnabled (boolean flag)
    • DOM存储API是否可用,默认false。
  • setAllowContentAccess (boolean allow) 是否允许在WebView中访问内容URL(ContentUrl),默认允许。内容Url访问允许WebView从安装在系统中的内容提供者载入内容。
  • setAllowFileAccessFromFileURLs (boolean flag)
    • 是否允许运行在一个URL环境(thecontext of a file scheme URL)中的JavaScript访问来自其他URL环境的内容,为了保证安全,应该不允许。
    • 注意,这项设置只影响对file schema 资源的JavaScript访问,其他形式的访问,例如来自图片HTML单元的访问不受影响。为了防止相同的域策略(same domain policy)对ICE_CREAM_SANDWICH以及更老机型的侵害,应该显式地设置此值为false。
  • setAllowUniversalAccessFromFileURLs (boolean flag)
    • 是否允许运行在一个fileschema URL环境下的JavaScript访问来自其他任何来源的内容,包括其他file schema URLs.
    • 参见setAllowFileAccessFromFileURLs(boolean),为了确保安全,应该设置为不允许,注意这项设置只影响对file schema 资源的JavaScript访问,其他形式的访问,例如来自图片HTML单元的访问不受影响。
    • 为了防止相同的域策略(same domain policy)ICE_CREAM_SANDWICH以及更老机型的侵害,应该显式地设置此值为false。ICE_CREAM_SANDWICH_MR1以及更老的版本此默认值为true,JELLY_BEAN以及更新版本此默认值为false。
  • setAppCacheEnabled (boolean flag)
    • 应用缓存API是否可用,默认值false结合setAppCachePath(String)使用。
  • setAppCachePath(String)
    • 设置应用缓存文件的路径。为了让应用缓存API可用,此方法必须传入一个应用可写的路径。
    • 该方法只会执行一次,重复调用会被忽略。
  • setBlockNetworkImage (boolean flag)
    • 是否禁止从网络(通过http和https URI schemes访问的资源)下载图片资源,默认值为false。
    • 注意,除非getLoadsImagesAutomatically()返回true,否则该方法无效。还请注意,即使此项设置为false,使用setBlockNetworkLoads(boolean)禁止所有网络加载也会阻止网络图片的加载。
    • 当此项设置的值从true变为false,WebView当前显示的内容所引用的网络图片资源会自动获取。
  • setBlockNetworkLoads (boolean flag)
    • 是否禁止从网络下载数据,如果app有INTERNET权限,默认值为false,否则默认为true。
    • 使用setBlockNetworkImage(boolean)只会禁止图片资源的加载。注意此值由true变为false,当前WebView展示的内容所引用的网络资源不会自动加载,直到调用了重载。
    • 如果APP没有INTERNET权限,设置此值为false会抛出SecurityException。
  • setCacheMode (int mode)
    • 重写使用缓存的方式,默认值LOAD_DEFAULT。
    • 缓存的使用方式基于导航类型,正常的页面加载,检测缓存,需要时缓存内容复现。导航返回时,内容不会复现,只有内容会从缓存盘中恢复。
    • 该方法允许客户端通过指定LOAD_DEFAULT,LOAD_CACHE_ELSE_NETWORK,LOAD_NO_CACHE or LOAD_CACHE_ONLY的其中一项来重写其行为。
  • setCursiveFontFamily (String font)
    • 设置WebView字体库字体,默认“cursive”
  • setDatabaseEnabled (boolean flag)
    • 数据库存储API是否可用,默认值false。
    • 注意,只能在当前进程的任意WebView加载页面之前修改此项,因为此节点之后WebView的实现类可能会忽略该项设置的改变。
    • 此方法只能执行一次,重复调用会被忽略。
  • setDefaultFixedFontSize (int size)
    • 设置默认固定的字体大小,默认为16,可取值1到72。
  • setDefaultFontSize (int size)
    • 设置默认的字体大小,默认16,可取值1到72。
  • setDefaultTextEncodingName (String encoding)
    • 设置默认的字符编码集,默认”UTF-8”。setBuiltInZoomControls(boolean).
  • setFantasyFontFamily (String font)
    • 设置fantasy字体集(font family)的名字默认为“fantasy”。
  • setFixedFontFamily (String font)
    • 设置固定的字体集的名字,默认为”monospace”。
  • setGeolocationDatabasePath (String databasePath)
    • 定位数据库的保存路径,为了确保定位权限和缓存位置的持久化,该方法应该传入一个应用可写的路径。
  • setGeolocationEnabled (boolean flag)
    • 定位是否可用,默认为true。
    • 请注意,为了确保定位API在WebView的页面中可用,必须遵守如下约定:
      • (1)app必须有定位的权限,参见ACCESS_COARSE_LOCATION, ACCESS_FINE_LOCATION;
      • (2)app必须提供onGeolocationPermissionsShowPrompt(String,GeolocationPermissions.Callback)回调方法的实现,在页面通过JavaScript定位API请求定位时接收通知。
      • 作为可选项,可以在数据库中存储历史位置和Web初始权限,参见setGeolocationDatabasePath(String).
  • setJavaScriptCanOpenWindowsAutomatically (boolean flag)
    • 让JavaScript自动打开窗口,默认false。适用于JavaScript方法window.open()。
  • setLayoutAlgorithm (WebSettings.LayoutAlgorithm l)
    • 设置布局,会引起WebView的重新布局(relayout),默认值NARROW_COLUMNS。
  • setLoadWithOverviewMode (boolean overview)
    • 是否允许WebView度超出以概览的方式载入页面,默认false。
    • 即缩小内容以适应屏幕宽度。该项设置在内容宽度超出WebView控件的宽度时生效,例如当getUseWideViewPort()返回true时。
  • setLoadsImagesAutomatically (boolean flag)
    • WebView是否下载图片资源,默认为true。
    • 注意,该方法控制所有图片的下载,包括使用URI嵌入的图片(使用setBlockNetworkImage(boolean)只控制使用网络URI的图片的下载)。
    • 如果该设置项的值由false变为true,WebView展示的内容所引用的所有的图片资源将自动下载。
  • setMediaPlaybackRequiresUserGesture (boolean require)
    • WebView是否需要用户的手势进行媒体播放,默认值为true。
  • setMinimumFontSize (int size)
    • 设置最小的字号,默认为8。
  • setMinimumLogicalFontSize (int size)
    • 设置最小的本地字号,默认为8。
  • setMixedContentMode (int mode)
    • 当一个安全的来源(origin)试图从一个不安全的来源加载资源时配置WebView的行为。
    • 默认情况下,KITKAT及更低版本默认值为MIXED_CONTENT_ALWAYS_ALLOW,LOLLIPOP版本默认值MIXED_CONTENT_NEVER_ALLOW。
    • WebView首选的最安全的操作模式为MIXED_CONTENT_NEVER_ALLOW,不鼓励使用MIXED_CONTENT_ALWAYS_ALLOW。
  • setNeedInitialFocus (boolean flag)
    • 调用requestFocus(int,Android.graphics.Rect)时是否需要设置节点获取焦点,默认值为true。
  • setOffscreenPreRaster (boolean enabled)
    • 当WebView切换到后台但仍然与窗口关联时是否raster tiles,打开它可以避免在WebView从后台切换到前台时重新绘制,默认值false。
    • 在这种模式下后台的WebView占用更多的内存。请按如下准则显示内存的使用:
      • WebView的尺寸不能比设备的屏幕尺寸更大;
      • 限制在少数WebView上使用该模式;
      • 在可见的WebView和即将显现的WebView上使用;
  • setSansSerifFontFamily (String font)
    • 设置无衬线字体集(sans-serif font family)的名字。默认值”sans-serif”。
  • setSaveFormData (boolean save)
    • WebView是否保存表单数据,默认值true。
  • setSerifFontFamily (String font)
    • 设置衬线字体集(serif font family)的名字,默认“sans-serif”。
  • setStandardFontFamily (String font)
    • 设置标准字体集的名字,默认值“sans-serif”。
  • setSupportMultipleWindows (boolean support)
    • 设置WebView是否支持多窗口。如果设置为true,主程序要实现onCreateWindow(WebView, boolean,boolean, Message),默认false。
  • setSupportZoom (boolean support)
    • WebView是否支持使用屏幕上的缩放控件和手势进行缩放,默认值true。
    • 设置setBuiltInZoomControls(boolean)可以使用特殊的缩放机制。该项设置不会影响zoomIn() and zoomOut()的缩放操作。
  • setTextZoom (int textZoom)
    • 设置页面上的文本缩放百分比,默认100。
  • setUseWideViewPort (boolean use)
    • WebView是否支持HTML的“viewport”标签或者使用wide viewport。
    • 设置值为true时,布局的宽度总是与WebView控件上的设备无关像素(device-dependent pixels)宽度一致。
    • 当值为true且页面包含viewport标记,将使用标签指定的宽度。如果页面不包含标签或者标签没有提供宽度,那就使用wide viewport。
  • setUserAgentString (String ua)
    • 设置WebView的用户代理字符串。
    • 如果字符串为null或者empty,将使用系统默认值。
    • 注意从KITKAT版本开始,加载网页时改变用户代理会让WebView再次初始化加载。
  • supportMultipleWindows ()
    • 获取WebView是否支持多窗口的值。
  • supportZoom ()
    • 获取WebView是否支持缩放的值。

已废弃的API 方法

  • setTextSize (WebSettings.TextSize t)
    • API14版本以上已废弃。请取代使用setTextZoom(int)。设置页面文本的尺寸,默认NORMAL。
  • setSavePassword (boolean save)
    • API18以上版本已废弃。未来版本将不支持保存WebView中的密码。
    • 设置WebView是否保存密码,默认true。
  • setDefaultZoom (WebSettings.ZoomDensity zoom)
    • 已废弃。设置默认的缩放密度,必须在UI线程调用,默认值MEDIUM.该项设置在新应用中不推荐使用。
    • 如果WebView用于展示手机页面,可以通过调整页面的’meta viewport’ 标记中的’width’ 和‘initial-scale’属性实现预期效果,对于漏用标记的页面,可以使用setInitialScale(int)和setUseWideViewPort(boolean)。
  • setDatabasePath (String databasePath)
    • 已废弃,数据库路径由实现(implementation)管理,调用此方法无效。
    • 设置数据库的存储路径,为了保证数据库正确运行,该方法必须使用一个应用可写的路径。
  • setAppCacheMaxSize (long appCacheMaxSize)
    • 已废弃。设置应用缓存内容的最大值。所传值会被近似为数据库支持的最近似值,因此这是一个指示值,而不是一个固定值。
    • 所传值若小于数据库大小不会让数据库调整大小。默认值是MAX_VALUE,建议将默认值设置为最大值。
  • setEnableSmoothTransition (boolean enable)
    • 已废弃,将来会成为空操作(no-op),设置当panning或者缩放或者持有当前WebView的window没有焦点时是否允许其光滑过渡,若为true,WebView会选择一个性能最大化的解决方案。
    • 例如过渡时WebView的内容可能不更新。若为false,WebView会保持精度(fidelity),默认值false。
  • setLightTouchEnabled (boolean enabled)
    • 从 JELLY_BEAN开始,该设置无效。允许使用轻触摸做出选择和光标悬停。
  • setPluginState (WebSettings.PluginState state)
    • 在API18以上已废弃。未来将不支持插件,不要使用。
    • 告诉WebView启用、禁用或者有即用(on demand)的插件,即用模式是指如果存在一个可以处理嵌入内容的插件,会显示一个占位图标,点击时开启。默认值OFF。
  • setRenderPriority (WebSettings.RenderPriority priority)
    • 在API18以上已废弃。不建议调整线程优先级,未来版本不会支持这样做。
    • 设置绘制(Render,很多书上翻译成渲染,貌似很专业,但是不易懂,不敢苟同)线程的优先级。不像其他设置,同一进程中只需调用一次,默认值NORMAL。

项目地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值