Web初试

先贴代码
package com.example.admin.test_0309_1;

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {
    private String url="http://www.baidu.com";
    private WebView webView;
    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       /*
        Uri uri=Uri.parse(url);
        Intent intent=new Intent(Intent.ACTION_VIEW,uri);
        startActivity(intent);
        */
        init();

    }

    private void init() {
        webView = (WebView) findViewById(R.id.webView);
        webView.loadUrl("http://www.hao123.com");
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //为true的的时候就在webview中打开
                view.loadUrl(url);
                return true;
            }
        });

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                if (newProgress == 100) {
                    //网页加载完毕
                    closeDialog();
                } else {
                    //网页正在加载

                    openDialog(newProgress);
                }
                super.onProgressChanged(view, newProgress);
            }

            private void closeDialog() {
                if (progressDialog != null) {
                    progressDialog.dismiss();
                    progressDialog = null;

                }
            }

            private void openDialog(int newProgress) {
                if (progressDialog == null) {
                    progressDialog = new ProgressDialog(MainActivity.this);
                    progressDialog.setTitle("正在加载");
                    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
                    progressDialog.setProgress(newProgress);
                    progressDialog.show();
                } else {
                    progressDialog.setProgress(newProgress);
                }
            }

        });
    }
    //改写物理按键--返回的逻辑

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show();
            if(webView.canGoBack()){
                webView.goBack();
                return true;
            }else{
                System.exit(0);
            }
        }
        return super.onKeyDown(keyCode, event);
    }
}


当然布局中已经把webView加入了布局中  这里运行webView必须得先在Androidmanifest里加入入网许可如下:

<uses-permission android:name="android.permission.INTERNET"/>
然后就设置webView就可以了

这里记录一下几个重要的设置

/*
 Uri uri=Uri.parse(url);
 Intent intent=new Intent(Intent.ACTION_VIEW,uri);
 startActivity(intent);
 */
url为设置好的超链接字符串 上面是可以用intent方式来打开  当然 这个方法会默认使用系统中自带的浏览器或者第三方浏览器来打开网页

所以为了让webView打开网页就涉及一个方法  覆盖系统中的浏览器用控件自己打开 方法如下

webView = (WebView) findViewById(R.id.webView);
webView.loadUrl("http://www.hao123.com");
webView.setWebViewClient(new WebViewClient() {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        //true的的时候就在webview中打开
        view.loadUrl(url);
        return true;
    }
});

WebViewClient中的 shoulidOverrideUrlLoading方法 返回true即为使用控件打开 false相反

这里可以看到在方法中 有view.loadUrl(url)  这里的url并不是我一开始设置的url字符串  而是方法中的参数 他的数值应该是前面载入的 hao123


然后是set方法设置JS属性

WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);

通过WebSetting方法来摄制JavaScript的载入 这里选择为true

此时的网页载入进去之后就会发现不管你打开多少的网页 只要你点击啊的back就会直接退出程序  所以这里需要重写在webview中back按键的响应

方法onKeyDown

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode==KeyEvent.KEYCODE_BACK){
        //Toast.makeText(this,webView.getUrl(),Toast.LENGTH_SHORT).show();
        if(webView.canGoBack()){
            webView.goBack();
            return true;
        }else{
            System.exit(0);
        }
    }
    return super.onKeyDown(keyCode, event);
}

语言描述一下 如果按键是返回键  

如果网页可以返回

那么返回

方法返回值 true

否则结束程序

最后的返回语句别删了 

现在的网页就基本完成了  但是美中不足需要在其中加入一个进度条 这样可以在等待页面的时候显得不那么傻

所以有以下的方法

setWebChromeClient
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public void onProgressChanged(WebView view, int newProgress) {
        if (newProgress == 100) {
            //网页加载完毕
            closeDialog();
        } else {
            //网页正在加载

            openDialog(newProgress);
        }
        super.onProgressChanged(view, newProgress);
    }

    private void closeDialog() {
        if (progressDialog != null) {
            progressDialog.dismiss();
            progressDialog = null;

        }
    }

    private void openDialog(int newProgress) {
        if (progressDialog == null) {
            progressDialog = new ProgressDialog(MainActivity.this);
            progressDialog.setTitle("正在加载");
            progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            progressDialog.setProgress(newProgress);
            progressDialog.show();
        } else {
            progressDialog.setProgress(newProgress);
        }
    }

});
添加方法后 进行设置  如果newProgress ==100 即是 如果进度条满了 那么 关闭进度条 当然这里的进度条是自己在前面要添加的   前面有学过 ProgressDialog

不为100就打开进度条 

然后设置进度条打开关闭的方法

当然  打开肯定是先有的

档进度条==null 不存在时候 添加一个新的进度条 在当前界面 设置标题正在加载  设置风格    设置加入setWebChromeClient中的newProgress  然后show出来 否则直接加入newProgress

然后就是关闭的方法  如果不是空  就关闭咯


最后是webView运行模式  是否使用本地缓存

webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
同样是webSetting中的一个方法  setCacheMode


完毕  Web初试_第1张图片



你可能感兴趣的:(android)