WebView:基本设置与使用

转载请标明出处:http://blog.csdn.net/jj583500596/article/details/68944984

一、简介

WebView作为Android控件为Android App开发提供了新的方式,WebView加载Html页面可以作为App交互界面。由于Html页面开发具有及时性,可以用来实现一些App中经常因需求修改而改动的界面,不用因为经常修改而迭代版本。

二、常见API

1.WebView常用API

    getSettings()  -  获取设置WebView的WebSettings对象。
    setWebViewClient(WebViewClient client)  -  设置将接收各种通知和请求的WebViewClient。
    setWebChromeClient(WebChromeClient client)  -  设置chrome处理。

2.WebSettings常用API

    setAllowFileAccess  -  启用或禁用WebView访问文件数据
    setBlockNetworkImage  -  是否显示网络图像
    setBuiltInZoomControls  -  设置是否支持缩放
    setFixedFontFamily  -  设置固定使用的字体
    setJavaScriptEnabled  -  设置是否支持Javascript
    setLayoutAlgorithm  -  设置布局方式
    setLightTouchEnabled  -  设置用鼠标激活被选项
    setSupportZoom  -  设置是否支持变焦
    setCacheMode  -  设置缓冲的模式
    setDefaultFontSize  -  设置默认的字体大小
    setDefaultTextEncodingName  -  设置在解码时时候用的默认编码

3.WebChromeClient常用API

    onCloseWindow  -  关闭WebView
    onCreateWindow  -  创建WebView
    onProgressChanged  -  加载进度条改变
    onReceivedlcon  -  网页图标更改
    onReceivedTitle  -  网页Title更改
    onRequestFocus  -  WebView显示焦点
    onJsAlert  -  处理Javascript中的Alert对话框
    onJsConfirm  -  处理Javascript中的Confirm对话框
    onJsPrompt  -  处理Javascript中的Prompt对话框

4.WebViewClient 常用API

    doUpdateVisitedHistory  -  更新历史记录
    onFormResubmission  -  应用程序重新请求网页数据
    onPageStarted  -  网页开始加载
    onReceivedError  -  报告错误信息
    onScaleChanged  -  WebView发生改变
    shouldOverrideUrlLoading  -  控制新的连接在当前WebView中打开
    onLoadResource  -  加载指定地址提供的资源
    onPageFinished  -  网页加载完毕

三、WebView基本设置

1.添加权限

因为WebView要加载网页,所以AndroidManifest.xml中必须添加联网权限,否则会出Web page not available错误。

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

2.创建WebView

  • 静态创建
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
  • 动态创建
WebView mWebView = new WebView(this);

3.初始化WebView

  • 如果访问的页面中有Javascript,则webview必须设置支持Javascript:
// 启用WebView对JavaScript的支持
mWebView.getSettings().setJavaScriptEnabled(true);
  • 触摸焦点起作用(如果不设置,则在点击网页文本输入框时,不能弹出软键盘及不响应其他的一些事件)
// 触摸焦点起作用(如果不设置,则在点击网页文本输入框时,不能弹出软键盘及不响应其他的一些事件)
mWebView.requestFocus();
  • 取消滚动条
// 取消滚动条
mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
  • 允许网页缩放
// 允许网页缩放
mWebView.getSettings().setSupportZoom(true);
  • 先加载文本,图片放到最后再渲染
// 把图片加载放在最后来加载渲染
mWebView.getSettings().setBlockNetworkImage(true);
  • 回退WebView的加载层级,而不是退出Activity
   @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
      // 是否按下返回键,且WebView现在的层级,可以返回
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
           // 返回WebView的上一页面
           mWebView.goBack();
            return true;
        }
        return false;
   }
  • 在WebView开始加载时,显示进度框;加载完毕时,隐藏进度框
        mWebView.setWebViewClient(new WebViewClient() {
           /**
            * WebView加载url完成时,会回调此api,可在这个api中隐藏加载进度框
            */
            @Override
            public void onPageFinished(WebView view, String url) {
               // 此处可添加一些逻辑:隐藏加载进度框
               progressbar.setVisibility(GONE);
            }

           /**
            * WebView开始加载url时,会回调此api,可在这个api中显示加载进度框
            */
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
             // 此处可添加一些逻辑:显示加载进度框
             progressbar.setVisibility(VISIBLE);
            }
        });

        mWebView.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress == 100) {
                    progressbar.setVisibility(GONE);
                } else {
                    if (progressbar.getVisibility() == GONE)
                        progressbar.setVisibility(VISIBLE);
                    progressbar.setProgress(newProgress);
                }
                super.onProgressChanged(view, newProgress);
            }
        });


progressbar.xml样式设置:

<?xml version="1.0" encoding="UTF-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!--  设置背景色  -->
    <item  android:id="@android:id/background" >
        <shape>
            <corners android:radius="5dp" />
            <gradient android:startColor="#ffffff"
                android:endColor="#ffffff" />
        </shape>
    </item>
    <!--  设置进度条颜色  -->
    <item  android:id="@android:id/progress" >
        <clip>
            <shape>
                <corners android:radius="5dp" />
                <gradient  android:startColor="#0000ff"
                    android:endColor="#0000ff" />
            </shape>
        </clip>
    </item>
</layer-list>


引用progressbar.xml

<ProgressBar
    style="?android:attr/progressBarStyleHorizontal"
    android:id="@+id/myProgressBar"
    android:layout_width="match_parent"
    android:layout_height="5px"
    android:progressDrawable="@drawable/progressbar_webview"
/>
  • 设置WevView要显示的网页

加载网络URL地址:

// 加载网络的url地址
mWebView.loadUrl("https://www.baidu.com/");


加载本地URL地址:(本地文件存放在:assets文件中)

// 加载本地的url地址
mWebView.loadUrl("file:///android_asset/test.html");


4.WebView的缺点

  • WebView不及时释放导致的内存泄漏
    在开发完成后的内存优化时,小伙伴们会发现WebView使用完成后,如果不能及时释放导致的内存泄露是比较严重的,尤其是在WebView使用中调用了broadcast/server等会一直占有线程的方法。所以不再使用WebView时尽快释放WebView的引用。


    到这里咱们了解了WebView加载Html的一些常用API与基本设置。希望这篇博客能为小伙伴们提供一些帮助。WebView的初始化会根据需求不同,进行不同的设置。这里我们没有相应的Demo,但咱们现在加载使用WebView加载一些网页还是没有问题的,但是一些WebView js交互还不能使用,咱们下回详。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值