博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebView基本用法
阅读量:7230 次
发布时间:2019-06-29

本文共 2373 字,大约阅读时间需要 7 分钟。

加载本地html文件

在src/main目录下通过new→folder→assets创建一个asset目录,写一个html文件。我写了一个test.html

Hello World

复制代码

之后在代码里通过findviewbyid找到你定义的webview控件。

mWebView = (WebView) findViewById(R.id.wv);mWebView.loadUrl("file:///android_asset/test.html");复制代码

loadUrl()这一方法既可以加载网址也可以加载本地html文件,加载本地assets下的文件只需要在参数里写"file:///android_asset/文件名.html"就可以,不过一定要注意这里是三个'/'而不是两个

加载网络地址

同样还是使用loadUrl()方法,我们尝试一下访问我的博客主页mWebView.loadUrl("https://mxz123456798.github.io/blog/");,记得添加<uses-permission android:name="android.permission.INTERNET" />这一权限。此时运行,你会发现网页并不能打开,这是因为webview是默认禁用javascript的,我们需要把这一禁用取消掉,通过mWebView.getSettings().setJavaScriptEnabled(true);这一方式,这样再次运行,就可以成功打开了。

以上我们只是实现了能够在webview内打开一个网页,当我们点击网页内的链接时,并不会在webview内打开而是会选择你手机的默认打开方式进行打开,我们需要对这一情况进行优化。

将标题栏设置为所打开网页的标题

要实现这个功能,我们可以重写WebChromeClient类中的onReceivedTitle()方法

class MyWebChromeClient extends WebChromeClient {        @Override        public void onReceivedTitle(WebView view, String title) {            super.onReceivedTitle(view, title);            setTitle(title);        }    }复制代码

当接收到标题时,将标题设置为接收到的标题。

在webview内打开链接

想要让自己的webview来处理事件而非浏览器,就要个你的webview控件设置一个WebViewClient,因此新建一个类继承WebViewClient,并在这个类里重写相应的方法。

class MyWebViewClient extends WebViewClient {        @Override        public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {            view.loadUrl(request.getUrl().toString());            return true;        }    }复制代码

然后给webview设置一个MyWebViewClient

mWebView.setWebViewClient(new MyWebViewClient());复制代码

加载JS代码

webview是可以执行JS代码的,同样也可以通过JS接口回调来对原生控件进行操作。 在上面的MyWebViewClient类中,重写onPageFinished()方法。

@Override        public void onPageFinished(WebView view, String url) {            super.onPageFinished(view, url);//            mWebView.loadUrl("javascript:alert('hello')");            mWebView.evaluateJavascript("javascript:alert('hello')",null);        }复制代码

当当前网页加载结束之后,执行一段js代码,可以调用loadUrl("javascript:JS代码")或者evaluateJavascript("javascript:JS代码",null),后者的第二个参数是回调接口,在这里我把它设置为了null,当网页加载结束后,弹出一个hello

未知错误:如果你并没有给你的webview设置一个WebChromeClient,可能会导致JS代码无法运行

在webview内实现后退

@Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if (keyCode == KeyEvent.KEYCODE_BACK && mWebView.canGoBack()) {            mWebView.goBack();            return true;        }        return super.onKeyDown(keyCode, event);    }复制代码

重写onKeyDown方法,判断当按下返回键且webview能够后退时,webview执行后退。

转载地址:http://drpfm.baihongyu.com/

你可能感兴趣的文章
第七周
查看>>
java 字符串与字符数组相互转换
查看>>
遍历js的obj中所有属性得key
查看>>
Validate XML using a XSD (XML Schema)
查看>>
A Tour of Go Exercise: Errors
查看>>
Windows 7 转移用户文件夹
查看>>
Linux shell的环境配置和命令行技巧
查看>>
Objective-C中的SEL、IMP和Class类型(转)
查看>>
20180814 基于51单片机的数码相机实验指导书编写,继续挖坑
查看>>
数据库中的T-sql语句 条件修改 高级查询
查看>>
win7开机密码忘记了
查看>>
阿里前端两年随想
查看>>
day28(ajax之js原生代码实现)
查看>>
用自定义属性attr或prop方法,遍历获取当前点击a的titleid
查看>>
安卓真机测试遇到的检测不到安卓设备的问题
查看>>
我的大学,我的梦
查看>>
洛谷训练P1008(循环+暴力)
查看>>
【挖坟】HDU3205 Factorization
查看>>
reentrantlock用于替代synchronized
查看>>
Android包管理机制(二)PackageInstaller安装APK
查看>>