当前位置: 移动技术网 > IT编程>移动开发>Android > Android WebView组件用法详解

Android WebView组件用法详解

2019年07月24日  | 移动技术网IT编程  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网