网络技术之——WebView(轻松展示各种网页)

1.概述:

Android提供了一个WebView控件。借助它可以在自己的应用程序中嵌入一个浏览器,从而轻松的展示各种各样的网页。

2.获取手机网络状态:

利用网络管理器:ConnectivityManager类:
这里写图片描述
权限设置:
允许监听网络状态:

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

3.WebView用法:

加载网页:

webview.loadUrl("http://www.baidu.com");

WebView有setWebChromeClient和setWebViewClient两种方法:
这里写图片描述

这里写图片描述

setWebChromeClient和setWebViewClient的使用区别:

  • 1)使用WebChromeClient 可以操作Javascript dialogs(js脚本对话框), favicons(添加收藏的标志), titles(标题), 和 progress(进度条)。
    简单的说,如果除了加载HTML的话,只需要用WebViewClient即可,但是在进行兼容互联网上附加javascript的页面的时候和调用javascript对话框的时候,或者功能较为复杂的内嵌操作的时候,建议使用WebChromeClient :

onCloseWindow(关闭WebView)

onCreateWindow()

onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)

onJsPrompt

onJsConfirm

onProgressChanged

onReceivedIcon

onReceivedTitle

  • 2)WebViewClient就是帮助WebView处理各种通知、请求事件的。包括:

onLoadResource

onPageStart

onPageFinish

onReceiveError

onReceivedHttpAuthRequest

4.范例:

功能:利用webview加载百度网页,并且显示进度条加载的情况。
延伸功能:为了使页面点击返回时,能够显示上个页面而不是直接退出程序,这里还复写了按键的点击事件onKeyDown。

总代码:

public class MainActivity extends Activity implements OnClickListener {
    private Button mButConntionclick;
    private TextView mTextviewState;
    private TextView mTextviewError;
    private ConnectivityManager manager;
    private WebView webview;
    private ProgressBar proBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mButConntionclick = (Button) findViewById(R.id.button_connctionclick);
        mTextviewState = (TextView) findViewById(R.id.textview_conntinonstate);
        mTextviewError=(TextView) findViewById(R.id.textview_error);
        proBar=(ProgressBar) findViewById(R.id.probar);
        webview = (WebView) findViewById(R.id.webview);
        mButConntionclick.setOnClickListener(this);
        mTextviewState.setOnClickListener(this);

        webview.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {//正在加载中时调用此方法
                // TODO Auto-generated method stub
                super.onProgressChanged(view, newProgress);
                proBar.setProgress(newProgress);//将进度显示到进度条
            }
        });

        webview.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {//页面加载结束时调用
                // TODO Auto-generated method stub
                super.onPageFinished(view, url);
                proBar.setVisibility(View.INVISIBLE);//加载结束进度条不可见
            }
            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {//页面加载开始调用
                // TODO Auto-generated method stub
                super.onPageStarted(view, url, favicon);
                proBar.setVisibility(View.VISIBLE);
            }
            @Override//错误连接时调用,
            public void onReceivedError(WebView view, int errorCode,String description, String failingUrl) {
                //super.onReceivedError(view, errorCode, description, failingUrl);//注意将原来的复写父类的注释掉
                mTextviewError.setVisibility(View.VISIBLE);
                webview.setVisibility(View.INVISIBLE);
            }

        });

    }

    //webview.getSettings().setSupportZoom(true);



    // 返回按键可以回到上一个界面,利用按键监听和webview的堆栈
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if(webview.canGoBack()){
                webview.goBack();
                return true;//一种情况必须返回true,否则不执行

            }else {
                finish();
            }

        } 
        return super.onKeyDown(keyCode, event);
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.button_connctionclick:
            webview.loadUrl("http://www.bjlingzhuo.com");
            break;

        default:
            break;
        }
    }

}

分析:

进度条的显示:
这里写图片描述
Back按键复写:
这里写图片描述
webview本身会有一个堆栈,当点击链接进入另一个页面,可以通过goback返回原来界面。
在6.0之前是用onReceivedError方法来处理链接错误的。
这里写图片描述


延伸功能:使页面能够支持缩放:
注:由于在百度一些网站是设置的自适应屏幕,所以它屏蔽了缩放功能,并不允许你缩放,所以这里可以打开别的网页尝试用一下代码,进行支持缩放功能的设置,这样之后,页面就可以愉快的进行缩放啦。

webview.getSettings().setBuiltInZoomControls(true);

效果演示:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值