Posts Android学习-WebView控件的使用
Post
Cancel

Android学习-WebView控件的使用

Android-WebView控件的使用

1. 基本使用

WebView是一个基于webkit引擎、展现web页面的控件。

1.1 作用

  • 显示和渲染Web页面
  • 直接使用html文件(网络上或本地assets中)作布局
  • 可和JavaScript交互调用

1.2 基本用法

  • 加载url

    1
    2
    3
    4
    5
    6
    
    //方式1. 加载一个网页:
    webView.loadUrl("http://www.google.com/");
    //方式2:加载apk包中的html页面
    webView.loadUrl("file:///android_asset/test.html");
    //方式3:加载手机本地的html页面
    webView.loadUrl("content://com.android.htmlfileprovider/sdcard/test.html");
    
  • 前进 / 后退网页

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    //是否可以后退
    Webview.canGoBack() 
    //后退网页
    Webview.goBack()
    //是否可以前进                     
    Webview.canGoForward()
    //前进网页
    Webview.goForward()
    //以当前的index为起始点前进或者后退到历史记录中指定的steps
    //如果steps为负数则为后退,正数则为前进
    Webview.goBackOrForward(intsteps)
    
  • WebSettings类

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    //声明WebSettings子类
    WebSettings webSettings = webView.getSettings();
      
    //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
    webSettings.setJavaScriptEnabled(true);  
      
    //支持插件
    webSettings.setPluginsEnabled(true); 
      
    //设置自适应屏幕,两者合用
    webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小 
    webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小
      
    //缩放操作
    webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
    webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
    webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
      
    //其他细节操作
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存 
    webSettings.setAllowFileAccess(true); //设置可以访问文件 
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口 
    webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
    webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
    
  • WebViewClient类

    用于处理各种通知以及请求事件

    常见用法:

    避免在webview上点击网页链接时转到系统浏览器中

    1
    2
    3
    4
    5
    6
    7
    
    webView.setWebViewClient(new WebViewClient(){
      @Override
      public boolean shouldOverrideUrlLoading(WebView view, String url) {
          view.loadUrl(url);
      return true;
      }
    });
    

2. 错误解决

2.1 页面出现“net::ERR_CACHE_MISS”错误

  • 原因:APP权限不够

  • 解决:在AndroidManifest.xml文件中加入:

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

    加权限非常重要!

    在Activity中加入:

    1
    2
    3
    
    WebSettings settings =  webView.getSettings();
    settings.setAllowFileAccess(true);
    settings.setAllowContentAccess(true);
    

2.2 页面加载出来后,无法实现页面JS部分的功能

​ 在Activity中加入以下代码:

1
settings.setJavaScriptEnabled(true);

2.3 按下返回键后,直接退出了整个程序

按下返回键后,系统直接调用了该Activity的finish()函数,退出了本程序,一个对按下返回的事件处理函数就行重写。

代码如下:

1
2
3
4
5
6
7
8
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if ((keyCode == KeyEvent.KEYCODE_BACK) && webView.canGoBack()) {
        webView.goBack();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
This post is licensed under CC BY 4.0 by the author.