Android WebView的使用

Android WebView的使用

一、基础使用

这种方式会自动打开手机自带默认浏览器,打开网络地址

1. 添加网络访问权限

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

2. 加载网络地址

mWebView = (WebView)findViewById(R.id.lking_webview);
//加载网络地址
mWebView.loadUrl("http://baidu.com");

二、联合子类WebViewClient的使用

这种方式会在应用内部使用WebView打开网络地址

1. 添加网络访问权限

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

2. 加载网络地址

mWebView = (WebView)findViewById(R.id.lking_webview);
//WebView加载web资源
mWebView.loadUrl("http://baidu.com");
//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
        view.loadUrl(url);
        return true;
    }
});

三、联合子类WebSettings的使用

如果访问的网页中有Javascript,就必须要设置支持Javascript

设置自适应屏幕

缩放操作

其他细节操作

1. 添加网络访问权限

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

2. 加载网络地址

mWebView = (WebView)findViewById(R.id.lking_webview);
//加载网络地址
mWebView.loadUrl("http://baidu.com");
//启用支持javascript
WebSettings settings = mWebView.getSettings();
//如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
settings.setJavaScriptEnabled(true);

//设置自适应屏幕,两者合用
settings.setUseWideViewPort(true); //将图片调整到适合webview的大小
settings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

//缩放操作
settings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
settings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
settings.setDisplayZoomControls(false); //隐藏原生的缩放控件

//其他细节操作
settings.setAllowFileAccess(true); //设置可以访问文件
settings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
settings.setLoadsImagesAutomatically(true); //支持自动加载图片
settings.setDefaultTextEncodingName("utf-8");//设置编码格式

//覆盖WebView默认使用第三方或系统默认浏览器打开网页的行为,使网页用WebView打开
mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        // TODO Auto-generated method stub
        //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
        view.loadUrl(url);
        return true;
    }
});

四、希望浏览的网页后退不是退出浏览器,需要WebView覆盖Url加载,让它自动生成历史访问记录,那样就可以通过前进或后退访问已访问过的站点。

//改写物理按键——返回的逻辑
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode== KeyEvent.KEYCODE_BACK) {
        if(mWebView.canGoBack()) {
            mWebView.goBack();//返回上一页面
            return true;
        } else {
            System.exit(0);//退出程序
        }
    }
    return super.onKeyDown(keyCode, event);
}

 五、判断页面加载过程

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

或者使用另一种方式:

mWebView.setWebViewClient(new WebViewClient(){
    @Override
    public void  onPageStarted(WebView view, String url, Bitmap favicon) {
        //设定加载开始的操作

        Toast.makeText(MainActivity.this,"加载中",Toast.LENGTH_SHORT).show();
    }
    @Override
    public void onPageFinished(WebView view, String url) {
        //设定加载结束的操作

        Toast.makeText(MainActivity.this,"加载完成",Toast.LENGTH_SHORT).show();
    }
});

六、缓存的使用

WebSettings settings = mWebView.getSettings();
//优先使用缓存
settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
//不使用缓存
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
//LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据
//LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。
//LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
//LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据

七、如何避免WebView内存泄露

1. 不在xml中定义WebView,而是在需要的时候在Activity中创建,并Context使用getApplicationContext();

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                                             ViewGroup.LayoutParams.MATCH_PARENT,
                                             ViewGroup.LayoutParams.MATCH_PARENT);
mWebView = new WebView(getApplicationContext());
mWebView.setLayoutParams(params);
mLayout.addView(mWebView);

2. Activity销毁(WebView)的时候,先让WebView加载null内容,然后移除WebView,再销毁WebView,最后置空。

@Override
protected void onDestroy() {
    if (mWebView != null) {
        mWebView.loadDataWithBaseURL(null, "", "text/html", "utf-8", null);
        mWebView.clearHistory();

        ((ViewGroup) mWebView.getParent()).removeView(mWebView);
        mWebView.destroy();
        mWebView = null;
    }
    super.onDestroy();
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值