Android中WebView的详细解释

Android中WebView的详细解释:

1. 概念:

WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页。

2. 使用方法:

(1).实例化WebView组件:

A.在Activity中实例化WebView组件。eg:

   WebView webView = new WebView(this); 

B.调用WebView的loadUrl()方法,设置WevView要显示的网页.eg:

互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html");
本地文件存放在:assets 文件中 

C.调用Activity的setContentView( )方法来显示网页视图。

D.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。

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

(2).自定义WebView组件继承WebViewClient:

A.在布局文件中声明WebView。eg:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <WebView
            android:id="@+id/webView1"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />

    </LinearLayout>

B.在Activity中实例化WebView。

C.调用WebView的loadUrl()方法,设置WebView要显示的网页.

D.调用setWebViewClient()方法设置WebView视图。响应链接功能。

E.需要在AndroidManifest.xml文件中添加权限,否则出现Web page not available错误。

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

3. 两种方法的区别:

(1).第一种方法:点击链接是新开Android的系统browser中响应该链接。

(2).第二种方法:点击链接由自己处理,而不是新开Android的系统browser中响应该链接。给WebView添加一个事件监听对象(WebViewClient)并重写其中的shouldOverrideUrlLoading方法:对网页中超链接按钮的响应。当按下某个连接时WebViewClient会调用这个方法,并传递参数:按下的url。

4. 总结:

(1). 用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面。

 @Override
   public boolean onKeyDown(int keyCode, KeyEvent event) {
       if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
       // goBack()表示返回WebView的上一页面
           mWebView.goBack();
           return true;
       }
       return super.onKeyDown(keyCode, event);
   }

(2). 设置WebView基本信息:

A.如果访问的页面中有Javascript,则webview必须设置支持Javascript。

webview.getSettings().setJavaScriptEnabled(true);  

B.触摸焦点起作用:

 requestFocus();

C.取消滚动条:

this.setScrollBarStyle(SCROLLBARS_OUTSIDE_OVERLAY); 

5. 整体代码如下:

(1).MainActivity.java

package com.pansoft.webviewdemo;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;

import com.pansoft.webviewdemo.webView.MyWebView;

public class MainActivity extends Activity {
    private WebView mWebView = null;
    private WebSettings mSettings = null;
    /** TAG */
    private String TAG = getClass().getSimpleName();
    /** URL */
    private String FLG_URL = "http://www.baidu.com/";
    private MyWebView myWebView;

    @SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);

        // 第二种方法
        init01();
        // 第一种方法
        // init02();

    }

    /**
     * 加载的是webView本身的
     */
    private void init01() {
        setContentView(R.layout.activity_main);
        mWebView =(WebView)findViewById(R.id.webView1);
        mSettings = mWebView.getSettings();
        // WebView设置支持JavaScript
        mSettings.setJavaScriptEnabled(true);
        // 加载URL
        mWebView.loadUrl(FLG_URL);
        myWebView = new MyWebView(this, mWebView);
        mWebView.setWebViewClient(myWebView);

    }

    /**
     * 加载的是系统自带的浏览器
     */
    private void init02() {
        mWebView = new WebView(this);
        mSettings = mWebView.getSettings();
        mSettings.setJavaScriptEnabled(true);
        mWebView.loadUrl(FLG_URL);
        setContentView(mWebView);

    }

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
        // goBack()表示返回WebView的上一页面
            mWebView.goBack();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

}

(2).MyWebView.java

package com.pansoft.webviewdemo.webView;

import android.content.Context;
import android.graphics.Bitmap;
import android.webkit.HttpAuthHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;

/**
 * MyWebView
 *
 * @author Administrator
 *
 */
public class MyWebView extends WebViewClient {
    private Context mContext;
    private WebView mWebView;

    /**
     * 构造方法
     *
     * @param mContext
     * @param mWebView
     */
    public MyWebView(Context mContext, WebView mWebView) {
        super();
        this.mContext = mContext;
        this.mWebView = mWebView;
    }

    /**
     * 打开链接前的事件,为了避免再次按的时候加载的是系统自带的浏览器,点击链接由自己处理
     */
    // 这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url != null) {
            mWebView.loadUrl(url);

        }

        return true;
    }

    /**
     * 接收到Http请求的事件
     */
    @Override
    public void onReceivedHttpAuthRequest(WebView view,
            HttpAuthHandler handler, String host, String realm) {
        super.onReceivedHttpAuthRequest(view, handler, host, realm);
    }

    /**
     * 载入页面完成的事件
     */
    // 同样道理,我们知道一个页面载入完成,于是我们可以关闭loading条,切换程序动作。
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
    }

    /**
     * 载入页面开始的事件
     */
    // 这个事件就是开始载入页面调用的,通常我们可以在这设定一个loading的页面,告诉用户程序在等待网络响应。
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {
        // TODO Auto-generated method stub
        super.onPageStarted(view, url, favicon);
    }

}

(3).activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <WebView
        android:id="@+id/webView1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

(4).权限:

 <uses-permission android:name="android.permission.INTERNET" />
时间: 2024-10-24 08:02:20

Android中WebView的详细解释的相关文章

Android中时间戳的详细解释

Android中时间戳的详细解释: (1).定义: 时间戳就是根据当前系统时间生成的一组随机数字. (2).作用: 作为对数据唯一性的一种判断依据.避免了重复修改数据所带来的错误! (3).应用: (1).在银行account表中建立时间戳字段timestamp,设定为文本类型varchar. (2).当银行A读取account表中的存款字段时,同时也读取时间戳字段,比如123456. (3).当银行A修改完存款数值后,进行存盘操作时,将先前读取的时间戳123456与当时表中的时间戳进行一次对比

Android中Service的详细解释与使用

Android中Service的详细解释与使用: 概念: (1).Service可以说是一个在后台运行的Activity.它不是一个单独的进程,它只需要应用告诉它要在后台做什么就可以了. (2).它要是实现和用户的交互的话需要通过通知栏或者是通过发送广播,UI去接收显示. (3).它的应用十分广泛,尤其是在框架层,应用更多的是对系统服务的调用. 作用: (1).它用于处理一些不干扰用户使用的后台操作.如下载,网络获取.播放音乐,他可以通过INTENT来开启,同时也可以绑定到宿主对象(调用者例如A

Android中WebView的JavaScript代码和本地代码交互的三种方式

一.Android中WebView的漏洞分析 最近在开发过程中遇到一个问题,就是WebView使用的时候,还是需要解决之前系统(4.2之前)导致的一个漏洞,虽然现在这个系统版本用户很少了,但是也不能忽视,关于这个漏洞,这里就不多做解释了,可能有的同学早就了解了,本来想写一篇文章详细介绍一下,但是网上的知识太多了,而且都很详细,就没弄了,这里大致简单明了的说几句: 第一.漏洞产生的原因 这个漏洞导致的原因主要是因为Android中WebView中的JS访问本地方法的方式存在缺陷,我们做过交互的都知

Android中WebView开发汇总

1 去掉WebView的白色背景 2 WebView的超时处理 3 WebView加载网络PDF资源 4 图片自适应WebView大小(铺满WebView) 5 WebView利用UserAgent传递SESSIONID 6 监听WebView滑动到底部 7 WebView长按后调用文字复制功能 8 Android硬件加速以及WebView的onPause,onResume,OnDestroy 9 WebView不能加载Twitter的问题 10 WebView加载本地SD卡上的图片 11 We

Android 中Webview 自适应屏幕

随笔 - 478  文章 - 3  评论 - 113 Android 中Webview 自适应屏幕 webview中右下角的缩放按钮能不能去掉 settings.setDisplayZoomControls(false); //隐藏webview缩放按钮 让Webview加载的页面居中显示有我知道的几种方法 第一种方法: WebSettings settings = webView.getSettings(); settings.setLayoutAlgorithm(LayoutAlgorith

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

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

android中drawable资源的解释及例子

文章中的内容参考Dev Guide中的Drawable Resources,英文好的朋友可以直接去读英文.总结这篇文章的目的是自己在使用drawable资源遇到一些问题跟大家分享下,同时整理下自己对drawable的理解. drawable资源共有10种,包括Bitmap文件.Nine-Path文件.Layer List.State List.Level list.Transition Drawable.Inset Drawable.Clip Drawable.Scale Drawable.Sh

android 中webview的屏幕适配问题

两行代码解决WebView的屏幕适配问题 一个简单的方法,让网页快速适应手机屏幕,代码如下 1 2 WebSettings webSettings= webView.getSettings(); webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 说明:LayoutAlgorithm 是一个枚举,用来控制html的布局,总共有三种类型: 大专栏  android 中webview的屏幕适配问题ng>NORMAL:正常显示,

Android中WebView的相关使用

近期做的项目中,遇到个非常棘手的问题: 客户给我的数据是有限制的,因此,在返回某条详细页面内容的时候,他仅仅能给我一个html片段,里面包括 文字,图片以及附件的下载地址.假设网页模版规范的爱比較好说,可是他给我的数据中,不确定的因素非常多: 比方 可能没有图片,图片和文字穿插在一起,最为重要的是html便签他的嵌套层次和标签个数都是不确定的. 假设我採用解析html提取内容出来的话,预计就掉进坑里了....... 但实际情况中,打算server先将客户代码的标签属性删除,仅仅剩骨头,但结果还是