Android-使用WebView显示网页

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);

运行效果:



使用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>

主活动

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);
    }

}

但是结果:

记住要添加访问网络权限

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

OK,现在可以了



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

    webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                view.loadUrl(url);
                return true;
            }
        });

运行效果:

可以看到没有出现那个选择框了。默认是安卓设备自带的浏览器,而不是第三方的。



WebView中使用JavaScript

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

但是有一个不好的用户体验。

在我们浏览一个页面,再次进入另外一个页面的时候,点击返回键,重新回到上次页面的时候,

但是却退出了,这是一个非常不好的用户体验。

可以通过代码进行改善。

 // 重写方法使之可以返回上次的页面
    @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);
    }

效果:

这样就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;
                }
            }
        });

运行:



WebView使用缓存优化

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


完整代码

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);
    }

}

时间: 2024-10-11 22:41:17

Android-使用WebView显示网页的相关文章

Android使用WebView显示网页(图片缩放)

上周写了一篇关于webview的博文:Android使用WebView显示网页(图片大小的处理及内容的自适应) 后来通过自己想的第三种办法实现了图片的适配,方法是设置html的img标签属性,把图片的宽度设置为设备屏幕的宽度,涉及的知识点就是,获取设备宽度值.java代码 添加/修改 html标签属性. 1. 获取设备屏幕信息: /** * 获取设备的屏幕信息 * @param activity * @return */ public static DeviceInfo getDevicesPi

Android使用WebView显示网页

在Android开发过程中,会遇到需要显示网页的需求,或者需要用webview控件来达到某个效果.我这段时间在做CSDN博客的客户端,使用webview来显示博文内容,一是因为解析博文内容再适配比较麻烦,并且效果很不理想,后来想到直接用webview来显示,将博文原汁原味的呈现出来. webview使用起来比较容易,但是想要达到比较理想的效果还需要很多摸索.我做的CSDNBlog客户端,现在基本可以使用,已经在进行版本迭代了,但是博文的webview显示效果依然不太满意,主要是因为图片的缩放问题

Android中WebView获取网页中标题 ,内容, 图片的方法

如题,在Android中WebView获取网页中标题 ,内容, 图片的方法 首先是获取标题,在new WebChromeClient(){}中重写onReceivedTitle()方法 @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); // loge.e("__页面标题__"+title); } 获取内容,是参考的这边的 http

用WebView显示网页

用WebView显示网页非常方便,缺点是速度比较慢,对webView属性也要设置一下,否则可能会出现宽度不匹配等问题.代码并不复杂,如下: private WebView wv_statistics_html; @TargetApi(Build.VERSION_CODES.HONEYCOMB) @Override protected void initViews(Bundle savedInstanceState) {     requestWindowFeature(Window.FEATUR

Android:控件WebView显示网页

WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要处理解析,渲染网页等浏览器做的事情 setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 WebViewClient就是帮助WebView处理各种通知.请求事件的. 在AndroidManifest.xml设置访问网络权限:

Android:控件WebView显示网页 -摘自网络

WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient setWebClient:主要处理解析,渲染网页等浏览器做的事情 setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 WebViewClient就是帮助WebView处理各种通知.请求事件的. 在AndroidManifest.xml设置访问网络权限:

Android 控件WebView显示网页

WebView可以使得网页轻松的内嵌到app里,还可以直接跟js相互调用. webview有两个方法:setWebChromeClient 和 setWebClient 1)setWebClient:主要处理解析,渲染网页等浏览器做的事情 WebViewClient就是帮助WebView处理各种通知.请求事件的. 2)setWebChromeClient:辅助WebView处理Javascript的对话框,网站图标,网站title,加载进度等 1 在Activity_main.xml 添加一个W

android 之 webView 显示h5 执行选择图片或者拍照功能

开发工具是 android studio SDK版本是 4.3实现过程基本是这样h5中调用手机选择文件图片的代码是: <input accept="image/*" capture="camera" id="imgFile" name="imgFile" type="file"> 然后给webView 设置WebChromeClient WebChromeClient 主要处理解析,渲染网页等浏

Android使用Webview显示页面以及点击跳转StartActivity问题

以下是个人拙见,大神可直接忽略. 直接奔入主题,android的一个webview控件相信大家都特别熟悉了,可以用来加载显示网页,像商城的商品图文详情就可以用网页很快实现,但是最近项目中遇到不一样的问题,商品首页用webview显示,点击某一个商品或者商品分类startactivity跳转自身的界面,首页混杂一部分网页加载肯定会遇到界面显示卡顿,显示慢的问题,不过既然需求是这样,也只能照做了. 显示一个网页就不说了,首先,先优化一下显示速度问题,也就是显示文字和图片的先后,在oncreate方法