先贴代码
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


完毕



更多相关文章

  1. tab2
  2. 12.6 时间与日期
  3. 自定义ImageView重写onTouchEvent
  4. 安卓中找不到Theme.AppCompat.Light的解决方法
  5. Android(安卓)View绘制机制
  6. Test_TextSwitcher 使用方法
  7. 待研究
  8. Failed to find provider info for com.example.databasetest.pr
  9. AndroidX RecyclerView总结-测量布局

随机推荐

  1. Android(安卓)BroadcastAnyWhere(Google
  2. 关于 android:layout_x 和 android:layou
  3. Android常用控件TextView的属性详解
  4. Android 的消息队列模型
  5. 【Android】“android:gravity”和“andr
  6. android 结合 opencv项目(NDK、OpenCV、an
  7. Android消息机制和应用
  8. Android 面试必备 - JVM 及 类加载机制
  9. Android 5.0 API新增和改进
  10. Android Property System | Android属性