博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android学习日记15--WebView(网络视图)
阅读量:5158 次
发布时间:2019-06-13

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

一、WebView

1、简述

WebView(网络视图)内置WebKit引擎,能加载显示网页,还支持JS,并且能够在Android平台使用AJAX

WebView可以在布局中声明,也可以在Activity中直接实例化

 

2、主要步骤

使用WebView 的主要步骤:

1.在布局文件中声明WebView,通过findViewById或在Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/Todos.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />

 

3、实例演示

Activity代码:

1 @Override 2     public void onCreate(Bundle savedInstanceState) { 3         super.onCreate(savedInstanceState); 4         getWindow().requestFeature(Window.FEATURE_PROGRESS); 5         setContentView(R.layout.activity_main); 6         wv = (WebView) findViewById(R.id.wv); 7         wv.setWebChromeClient(new WebChromeClient() { // 为WebView设置WebChromeClient 8             @Override 9             public void onProgressChanged(WebView view, int newProgress) {
// 重写onProgressChanged方法10 MainActivity.this.setProgress(newProgress * 100);11 }12 });13 wv.setWebViewClient(new WebViewClient() { // 为WebView设置WebViewClient14 public void onReceivedError(WebView view, int errorCode,15 String description, String failingUrl) {
// 重写onReceivedError方法16 Toast.makeText(MainActivity.this, "Sorry!" + description,17 Toast.LENGTH_SHORT).show();18 }19 });20 Button btn = (Button) findViewById(R.id.btn); // 获取Button对象21 btn.setOnClickListener(new View.OnClickListener() { // 为Button对象设置OnClickListener监听器22 @Override23 public void onClick(View v) {24 25 EditText et = (EditText) findViewById(R.id.et); // 获得WebView对象26 String url = et.getText().toString().trim();27 if (URLUtil.isNetworkUrl(url)) { // 判断是否是网址28 wv.loadUrl(url);29 } else {30 Toast.makeText(MainActivity.this, "对不起,您输入的网址有错。",31 Toast.LENGTH_SHORT).show();32 et.requestFocus(); // 将焦点移到EditText33 }34 }35 });36 // 设置前进后退按钮37 Button btnForward = (Button) findViewById(R.id.btnForward);38 btnForward.setOnClickListener(new View.OnClickListener() {39 @Override40 public void onClick(View v) {41 if (wv.canGoForward()) { // 判断是否能够前进42 wv.goForward();43 } else {44 Toast.makeText(MainActivity.this, "对不起,您现在不能前进!",45 Toast.LENGTH_SHORT).show();46 }47 }48 });49 Button btnBack = (Button) findViewById(R.id.btnBack);50 btnBack.setOnClickListener(new View.OnClickListener() {51 @Override52 public void onClick(View v) {53 if (wv.canGoBack()) { // 判断是否能够前进54 wv.goBack();55 } else {56 Toast.makeText(MainActivity.this, "对不起,您现在不能后退!",57 Toast.LENGTH_SHORT).show();58 }59 }60 });61 }

第一次输入网址运行报错:

原因是没有在AndroidManifest配置权限,加入权限:

1 

再次输入博客园首页网址点击'浏览':

竟然出现一张美女图片,无意中发现个彩蛋,网址输成http://www.cnblog.com/  ,漏了个s

重新输入网址浏览:

上面有个进度条显示网页加载进度,多输入几个网址测试'前进','后退'的功能。

再输入本地文件测试,显示以前写的待办事项网页

注意:在输入本地文件网址时,代码要把判断是否是网址URLUtil.isNetworkUrl(url)去掉,因为不会识别file:///为网址

1                 //if (URLUtil.isNetworkUrl(url)) { // 判断是否是网址2                     wv.loadUrl(url);3                 //} else {4                 //    Toast.makeText(MainActivity.this, "对不起,您输入的网址有错。",5                 //            Toast.LENGTH_SHORT).show();6                 //    et.requestFocus(); // 将焦点移到EditText7                 //}

 

转载于:https://www.cnblogs.com/aiguozhe/p/3602387.html

你可能感兴趣的文章
MATLAB基础入门笔记
查看>>
【UVA】434-Matty&#39;s Blocks
查看>>
Android开发技术周报 Issue#80
查看>>
hadoop2.2.0+hive-0.10.0完全分布式安装方法
查看>>
django知识点总结
查看>>
C++ STL stack、queue和vector的使用
查看>>
使用Reporting Services时遇到的小问题
查看>>
约瑟夫问题
查看>>
Arduino 报错总结
查看>>
树莓派Android Things物联网开发:树莓派GPIO引脚图
查看>>
矩阵快速幂---BestCoder Round#8 1002
查看>>
如何将应用完美迁移至Android P版本
查看>>
【转】清空mysql一个库中的所有表的数据
查看>>
基于wxPython的python代码统计工具
查看>>
淘宝JAVA中间件Diamond详解(一)---简介&快速使用
查看>>
Hadoop HBase概念学习系列之HBase里的宽表设计概念(表设计)(二十七)
查看>>
Kettle学习系列之Kettle能做什么?(三)
查看>>
Day03:Selenium,BeautifulSoup4
查看>>
awk变量
查看>>
mysql_对于DQL 的简单举例
查看>>