Android-使用WebView显示网页

来源:互联网 发布:真菌转录因子数据库 编辑:程序博客网 时间:2024/06/06 09:14

Android-使用WebView显示网页

956人阅读 评论(0)收藏举报
分类:
作者同类文章X

    Android-使用WebView显示网页


    WebView是安卓提供显示web界面的工具类,可以像PC端的浏览器那样进行显示:
    这里写图片描述
    大致就是上图那样。其实也可以不用WebView,简单的三行代码就可以在安卓App上显示网页界面。


    示例

    Uri uri = Uri.parse("http://www.baidu.com");Intent it = new Intent(Intent.ACTION_VIEW, uri);startActivity(it);
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    运行效果:
    这里写图片描述


    使用WebView
    布局文件

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"                xmlns:tools="http://schemas.android.com/tools"                android:layout_width="match_parent"                android:layout_height="match_parent"                android:orientation="vertical"                tools:context=".MainActivity">    <WebView        android:id="@+id/id_webView"        android:layout_width="match_parent"        android:layout_height="match_parent"        ></WebView></LinearLayout>
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    主活动

    package com.xieth.as.webviewdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.webkit.WebView;public class MainActivity extends AppCompatActivity {    private WebView webView = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initViews();        webView.loadUrl("http://www.baidu.com");    }    private void initViews() {        webView = (WebView) findViewById(R.id.id_webView);    }}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    但是结果:
    这里写图片描述
    记住要添加访问网络权限

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

    OK,现在可以了
    这里写图片描述


    可以看到有选择浏览器的对话框。其实我们可以通过代码来指定浏览器来显示,不需要再次选择。

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

    运行效果:
    这里写图片描述
    可以看到没有出现那个选择框了。默认是安卓设备自带的浏览器,而不是第三方的。


    WebView中使用JavaScript

            // 启用支持JavaScript        WebSettings webSettings = webView.getSettings();        webSettings.setJavaScriptEnabled(true);
    • 1
    • 2
    • 3
    • 1
    • 2
    • 3

    但是有一个不好的用户体验。
    这里写图片描述
    在我们浏览一个页面,再次进入另外一个页面的时候,点击返回键,重新回到上次页面的时候,
    但是却退出了,这是一个非常不好的用户体验。
    可以通过代码进行改善。

     // 重写方法使之可以返回上次的页面    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            if (webView.canGoBack()) {  // 判断当前页面是否处于首部                webView.goBack();// 返回上一页面                return true;            } else { // 如果当前页面是第一个页面                System.exit(0); // 退出程序            }        }        return super.onKeyDown(keyCode, event);    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    效果:
    这里写图片描述
    这样就OK了


    判断网页的加载过程
    在使用浏览器访问网页的时候,有时候会加载慢,有时候会很快,所以为了给用户更加良好的体验,
    我们可以通过进度条的方式来进行展示。

     // 进度条显示网页的加载过程        webView.setWebChromeClient(new WebChromeClient() {            @Override            public void onProgressChanged(WebView view, int newProgress) {                if (newProgress == 100) {                    // 加载完毕                    closeDialog(newProgress);                } else {                    openDialog(newProgress);                }                super.onProgressChanged(view, newProgress);            }            private void openDialog(int newProgress) {                if (dialog == null) {                    dialog = new ProgressDialog(MainActivity.this);                    dialog.setTitle("正在加载");                    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                    dialog.setProgress(newProgress);                    dialog.show();                } else {                    dialog.setProgress(newProgress);                }            }            private void closeDialog(int newProgress) {                if (dialog != null && dialog.isShowing()) {                    dialog.dismiss();                    dialog = null;                }            }        });
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36

    运行:
    这里写图片描述


    WebView使用缓存优化

            // 优先使用缓存优化效率        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
    • 1
    • 2
    • 1
    • 2

    完整代码

    package com.xieth.as.webviewdemo;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 WebView webView = null;    private ProgressDialog dialog = null;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initViews();        webView.loadUrl("http://www.baidu.com");        webView.setWebViewClient(new WebViewClient() {            @Override            public boolean shouldOverrideUrlLoading(WebView view, String url) {                view.loadUrl(url);                return true;            }        });        // 启用支持JavaScript        WebSettings webSettings = webView.getSettings();        webSettings.setJavaScriptEnabled(true);        // 进度条显示网页的加载过程        webView.setWebChromeClient(new WebChromeClient() {            @Override            public void onProgressChanged(WebView view, int newProgress) {                if (newProgress == 100) {                    // 加载完毕                    closeDialog(newProgress);                } else {                    openDialog(newProgress);                }                super.onProgressChanged(view, newProgress);            }            private void openDialog(int newProgress) {                if (dialog == null) {                    dialog = new ProgressDialog(MainActivity.this);                    dialog.setTitle("正在加载");                    dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);                    dialog.setProgress(newProgress);                    dialog.show();                } else {                    dialog.setProgress(newProgress);                }            }            private void closeDialog(int newProgress) {                if (dialog != null && dialog.isShowing()) {                    dialog.dismiss();                    dialog = null;                }            }        });        // 优先使用缓存优化效率        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);    }    // 重写方法使之可以返回上次的页面    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK) {            if (webView.canGoBack()) {  // 判断当前页面是否处于首部                webView.goBack();// 返回上一页面                return true;            } else { // 如果当前页面是第一个页面                System.exit(0); // 退出程序            }        }        return super.onKeyDown(keyCode, event);    }    private void initViews() {        webView = (WebView) findViewById(R.id.id_webView);    }}
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99

    2
    0
     
     

      相关文章推荐
    • 【android进阶】Fragment内放置WebView,监听返回键,并返回之前打开的网页
    • android 访问并显示网页
    • Android——使用WebView显示网页
    • 【Android进阶篇】WebView显示网页详解
    • Android:控件WebView显示网页
    • 安卓加载webView只显示部分网页的方法
    • Android使用WebView加载网页及数据
    • android使用webview加载网页
    • android根据Url获取访问网页的源码
    • 【Android开发】网路编程及Internet应用-使用WebView显示网页
    原创粉丝点击