欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android WebView组件用法详解

程序员文章站 2024-02-26 13:40:04
本文实例讲述了android webview组件用法。分享给大家供大家参考,具体如下: 如果想webview能够访问网络,必须在androidmanifest.xml里面...

本文实例讲述了android webview组件用法。分享给大家供大家参考,具体如下:
如果想webview能够访问网络,必须在androidmanifest.xml里面添加权限

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

main.xml很简单,就是一个webview

<?xml version="1.0" encoding="utf-8"?>
<linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:orientation="vertical" >
  <webview
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
</linearlayout>

webviewdemoactivity.java代码:

package com.tianjf;
import android.app.activity;
import android.os.bundle;
import android.webkit.webview;
public class webviewdemoactivity extends activity {
  private webview mwebview;
  @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.main);
    mwebview = (webview) findviewbyid(r.id.webview);
    // 得到websettings对象,设置支持javascript参数
    // 如果访问的页面中有javascript,则webview必须设置支持javascript ,否则显示空白页面
    mwebview.getsettings().setjavascriptenabled(true);
    // 加载url
    mwebview.loadurl("http://www.baidu.com/");
  }
}

运行一下就会看到url被正确load出来了。

但是有个问题,当点击链接继续浏览,则会弹出系统默认的browser,为了能够继续在webview中浏览,要用到shouldoverrideurlloading方法:

@override
public void oncreate(bundle savedinstancestate) {
  。。。。。。。。。。。。。。。。。。。。。。。。
  // 虽然google主页在webview中显示了,但是如果点击链接继续浏览,则会显示到系统默认的browser中
  // 为了继续在webview中显示,需要重写shouldoverrideurlloading方法
  mwebview.setwebviewclient(new mywebviewclient());
  。。。。。。。。。。。。。。。。。。。。。。。。
    }
private class mywebviewclient extends webviewclient {
  @override
  public boolean shouldoverrideurlloading(webview view, string url) {
    view.loadurl(url);
    return true;
  }
}

另外,如果想按回退键回到上一个页面,那么

/**
 * 按back键可以回到上个网页
 */
@override
public boolean onkeydown(int keycode, keyevent event) {
  if ((keycode == keyevent.keycode_back) && mwebview.cangoback()) {
    mwebview.goback();
    return true;
  }
  return super.onkeydown(keycode, event);
}

对于android 2.0开始又多出了一种新的方法,对于activity 可以单独获取back键的按下事件,直接重写onbackpressed 方法即可,代码如下

@override
public void onbackpressed() {
 // 这里处理逻辑代码,该方法仅适用于2.0或更高版本的sdk
return ;
}

如果想加载工程中的html,那么可以用到下面的方法(前提是html放在assets目录中)

mwebview.loadurl("file:///android_asset/test.html");

如果想直接load一段html文,可以用下面的方法

mwebview.loaddata("<html><body>abcdefg</body></html>", "text/html", "utf-8");

下面是webview其他的一下用法:

设置允许访问文件数据

mwebview.getsettings().setallowfileaccess(true);

设置支持缩放

mwebview.getsettings().setbuiltinzoomcontrols(true);

设置是否保存密码

mwebview.getsettings().setsavepassword(false);

设置支持各种不同的设备

复制代码 代码如下:
mwebview.getsettings().setuseragentstring("mozilla/5.0 (ipad; u; cpu os 3_2 like mac os x;en-us) applewebkit/531.21.10 (khtml, like gecko) version/4.0.4 mobile/7b334bsafari/531.21.10");

加载webview网页时所要执行的一些方法

mwebview.setwebviewclient(new webviewclient() {
    // 新开页面时用自己定义的webview来显示,不用系统自带的浏览器来显示
    @override
    public boolean shouldoverrideurlloading(webview view, string url) {
      view.loadurl(url);
      return true;
    }
    // 开始加载网页时要做的工作
    @override
    public void onpagestarted(webview view, string url, bitmap favicon) {
      super.onpagestarted(view, url, favicon);
    }
    // 加载完成时要做的工作
    @override
    public void onpagefinished(webview view, string url) {
      super.onpagefinished(view, url);
    }
    // 加载错误时要做的工作
    @override
    public void onreceivederror(webview view, int errorcode,
        string description, string failingurl) {
      super.onreceivederror(view, errorcode, description, failingurl);
    }
});

处理网页中的一些对话框信息(提示对话框,带选择的对话框,带输入的对话框)

mwebview.setwebchromeclient(new webchromeclient() {
    // 提示对话框
    @override
    public boolean onjsalert(webview view, string url, string message,
        final jsresult result) {
      // 构建一个builder来显示网页中的alert对话框
      builder builder = new builder(webviewdemoactivity.this);
      builder.settitle("提示对话框");
      builder.setmessage(message);
      builder.setpositivebutton(android.r.string.ok,
          new alertdialog.onclicklistener() {
            @override
            public void onclick(dialoginterface dialog,
                int which) {
              result.confirm();
            }
          });
      builder.setcancelable(false);
      builder.create();
      builder.show();
      return true;
    }
    // 带按钮的对话框
    @override
    public boolean onjsconfirm(webview view, string url,
        string message, final jsresult result) {
      builder builder = new builder(webviewdemoactivity.this);
      builder.settitle("带选择的对话框");
      builder.setmessage(message);
      builder.setpositivebutton(android.r.string.ok,
          new alertdialog.onclicklistener() {
            @override
            public void onclick(dialoginterface dialog,
                int which) {
              result.confirm();
            }
          });
      builder.setneutralbutton(android.r.string.cancel,
          new alertdialog.onclicklistener() {
            @override
            public void onclick(dialoginterface dialog,
                int which) {
              result.cancel();
            }
          });
      builder.setcancelable(false);
      builder.create();
      builder.show();
      return true;
    }
    // 带输入框的对话框
    @override
    public boolean onjsprompt(webview view, string url, string message,
        string defaultvalue, final jspromptresult result) {
      layoutinflater inflater = layoutinflater
          .from(webviewdemoactivity.this);
      final view v = inflater.inflate(r.layout.mydialog, null);
      // 设置 textview对应网页中的提示信息
      ((textview) v.findviewbyid(r.id.textview)).settext(message);
      // 设置edittext对应网页中的输入框
      ((edittext) v.findviewbyid(r.id.edittext))
          .settext(defaultvalue);
      builder builder = new builder(webviewdemoactivity.this);
      builder.settitle("带输入的对话框");
      builder.setview(v);
      builder.setpositivebutton(android.r.string.ok,
          new alertdialog.onclicklistener() {
            @override
            public void onclick(dialoginterface dialog,
                int which) {
              string value = ((edittext) v
                  .findviewbyid(r.id.edittext)).gettext()
                  .tostring();
              result.confirm(value);
            }
          });
      builder.setnegativebutton(android.r.string.cancel,
          new alertdialog.onclicklistener() {
            @override
            public void onclick(dialoginterface dialog,
                int which) {
              result.cancel();
            }
          });
      builder.setoncancellistener(new dialoginterface.oncancellistener() {
        @override
        public void oncancel(dialoginterface dialog) {
          result.cancel();
        }
      });
      builder.create();
      builder.show();
      return true;
    }
    // 设置网页加载的进度条
    @override
    public void onprogresschanged(webview view, int newprogress) {
      webviewdemoactivity.this.getwindow().setfeatureint(
          window.feature_progress, newprogress * 100);
      super.onprogresschanged(view, newprogress);
    }
    // 设置应用程序的标题
    @override
    public void onreceivedtitle(webview view, string title) {
      webviewdemoactivity.this.settitle(title);
      super.onreceivedtitle(view, title);
    }
});

更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。