Android 第二十章 WebView

  1. 继承
    java.lang.Object
    ↳ android.view.View
    ↳ android.view.ViewGroup
    ↳ android.widget.AbsoluteLayout
    ↳ android.webkit.WebView
  2. WebView
	//简单使用
	//是否启用JavaScript执行,默认值为false
	webView.getSettings().setJavaScriptEnabled(true);
    webView.setWebViewClient(new WebViewClient());
    webView.loadUrl("http://www.baidu.com");
  1. WebSettings
	WebSettings webSettings = webView.getSettings();

	//是否启用WebView中的内容URL访问
	webSettings.setAllowContentAccess(true);
    //是否启用文件访问
	webSettings.setAllowFileAccess(true);
    //设置是否允许从文件URL访问文件
    webSettings.setAllowFileAccessFromFileURLs(true);
    //设置是否允许从文件URL进行通用访问
    webSettings.setAllowUniversalAccessFromFileURLs(true);
	//设置是否启用应用程序缓存API
    webSettings.setAppCacheEnabled(true);
    //设置缓存路径
    webSettings.setAppCachePath(getCacheDir().getAbsolutePath());
	//缓存最大大小
 	webSettings.setAppCacheMaxSize(Integer.MAX_VALUE);
	//是否从网络加载图像资源
	webSettings.setBlockNetworkImage(true);
    //是否加载网络资源
    webSettings.setBlockNetworkLoads(true);
    //是否可以缩放
    webSettings.setBuiltInZoomControls(true);
	//缓存模式
	webSettings.setCacheMode(WebSettings.LOAD_NORMAL);
	//是否启用数据库存储API
    webSettings.setDatabaseEnabled(true);
    //是否启用DOM存储API
    webSettings.setDomStorageEnabled(true);
    //设置使用内置缩放机制时,WebView是否显示屏幕上的缩放控件
    webSettings.setDisplayZoomControls(true);
    //设置默认的固定字体大小。默认值为16。
    //size是介于1和72之间的非负整数。外部任意数字将固定指定的范围。
    webSettings.setDefaultFixedFontSize(16);
    //设置默认字体大小。默认值为16。
    //size是介于1和72之间的非负整数。外部任意数字将固定指定的范围
    webSettings.setDefaultFontSize(16);
    //设置解码html页面时使用的默认文本编码名称,默认值为“UTF-8”
    webSettings.setDefaultTextEncodingName("UTF-8");
    //根据标志禁用操作模式菜单项
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        webSettings.setDisabledActionModeMenuItems(webSettings.MENU_ITEM_NONE);
    }
    //设置保存数据库存储API数据库的路径
    webSettings.setDatabasePath(getDir("database", Context.MODE_PRIVATE).getPath());
    //设置页面的默认缩放密度
    webSettings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
	//设置当平移或缩放时,或当承载WebView的窗口没有焦点时,WebView是否启用平滑过渡
    webSettings.setEnableSmoothTransition(true);
	//设置夜间模式
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
        webSettings.setForceDark(webSettings.FORCE_DARK_AUTO);
    }
    //设置幻想字体系列名称。默认为“fantasy”
    webSettings.setFantasyFontFamily("fantasy");
    //设置固定字体系列名称。默认值为“monospace”。
    webSettings.setFixedFontFamily("monospace");
	//设置是否启用地理位置
    webSettings.setGeolocationEnabled(true);
    //设置保存地理位置数据库的路径
    webSettings.setGeolocationDatabasePath(getFilesDir().getAbsolutePath());
	//是否支持JavaScript
    webSettings.setJavaScriptEnabled(true);
    //JavaScript是否可以自动打开窗口
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
	//设置基础布局算法 默认 NARROW_COLUMNS
    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
    //是否以概览模式加载页面,即缩小内容以适应屏幕宽度  默认false
    webSettings.setLoadWithOverviewMode(false);
    //是否加载图像资源 默认true
    webSettings.setLoadsImagesAutomatically(true);
    //允许使用轻触摸进行选择并激活鼠标悬停
    webSettings.setLightTouchEnabled(true);
	//是否需要用户手势来播放媒体
    webSettings.setMediaPlaybackRequiresUserGesture(true);
    //设置最小字体大小。默认值为8。取值范围1~72
    webSettings.setMinimumFontSize(8);
    //设置最小逻辑字体大小。默认值为8  取值范围1~72
    webSettings.setMinimumLogicalFontSize(8);
    //设置混合内容模式
    webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
    //是否需要设置节点以获得焦点 默认true
    webSettings.setNeedInitialFocus(true);
    //设置此WebView在屏幕外但附加到窗口时是否应光栅平铺
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        webSettings.setOffscreenPreRaster(false);
    }
    //启用、禁用或拥有插件
    webSettings.setPluginState(WebSettings.PluginState.OFF);
    //设置渲染线程的优先级。与其他设置不同 每个进程只需要调用一次
    webSettings.setRenderPriority(WebSettings.RenderPriority.NORMAL);
    //设置是否启用安全浏览
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        webSettings.setSafeBrowsingEnabled(true);
    }
    //设置无衬线字体系列名称。默认值为"sans-serif"
    webSettings.setSansSerifFontFamily("sans-serif");
    //设置衬线字体系列名称。默认值为“sans-serif”
    webSettings.setSerifFontFamily("sans-serif");
    //设置标准字体系列名称。默认值为“sans-serif”
    webSettings.setStandardFontFamily("sans-serif");
    //是否支持多个窗口
    webSettings.setSupportMultipleWindows(true);
    //是否支持使用其屏幕缩放控件和手势进行缩放
    webSettings.setSupportZoom(true);
    //是否保存表单数据
    webSettings.setSaveFormData(true);
    //是否保存密码
    webSettings.setSavePassword(true);
    //以百分比为单位设置页面的文本缩放。默认值为100。
    webSettings.setTextZoom(100);
    //设置页面的文本大小
    webSettings.setTextSize(WebSettings.TextSize.NORMAL);
    //用户代理字符串
    webSettings.setUserAgentString("");
    //是否启用对viewport元标记的支持
    webSettings.setUseWideViewPort(true);
  1. webView 事件
        //避免调用系统浏览器
        webView.setWebViewClient(new WebViewClient() {
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }

            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
            }

            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                super.onPageStarted(view, url, favicon);
            }
        });

        //设置WebChromeClient
        webView.setWebChromeClient(new WebChromeClient() {
            //通知主机应用程序网页要显示JavaScript alert()对话框
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                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.setNegativeButton(android.R.string.cancel, new AlertDialog.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        result.cancel();
                    }
                });
                builder.setCancelable(false);
                builder.create();
                builder.show();
                return true;
            }

            //通知主机应用程序网页要显示JavaScript confirm()对话框
            public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setTitle("confirm");
                builder.setMessage(message);
                builder.setPositiveButton(android.R.string.ok,
                        new AlertDialog.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                result.confirm();
                            }
                        });
                builder.setNegativeButton(android.R.string.cancel,
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int which) {
                                result.cancel();
                            }
                        });
                builder.setCancelable(false);
                builder.create();
                builder.show();
                return true;
            }

            @Override
            //显示进度条
            public void onProgressChanged(WebView view, int newProgress) {
                MainActivity.this.getWindow().setFeatureInt(Window.FEATURE_PROGRESS, newProgress * 100);
                super.onProgressChanged(view, newProgress);
            }

            //设置标题
            public void onReceivedTitle(WebView view, String title) {
                MainActivity.this.setTitle(title);
                super.onReceivedTitle(view, title);
            }

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

            public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
                callback.invoke(origin, true, false);
                super.onGeolocationPermissionsShowPrompt(origin, callback);
            }

            public void onReachedMaxAppCacheSize(long spaceNeeded, long totalUsedQuota, WebStorage.QuotaUpdater quotaUpdater) {
                quotaUpdater.updateQuota(spaceNeeded * 2);
            }
        });

        // 返回上一页,不是直接退出webView
        webView.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                if (event.getAction() == KeyEvent.ACTION_DOWN) {
                    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
                        webView.goBack();
                        return true;
                    }
                }
                return false;
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值