博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简易网页浏览器的实现
阅读量:6224 次
发布时间:2019-06-21

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

简单网页浏览器的实现

 

  这几天学习了Android关于网页访问及浏览器实现方面的知识,今天简单总结一下。

  Android中提供了一个组件——WebView,使得浏览器的实现变得非常简单,当然这里指的是比较初级的。

  下面先贴上代码吧。

1、布局文件

  布局文件为activity_main.xml,由一个网址输入框AutoCompleteTextView、一个网页播放页WebView及三个按钮组成(完成的功能分别为上一页、下一页及刷新)

1 
5 6
14 15
21 22
30 31
37 38
44 45
51 52 53 54

  

2、字串定义

  组件中所需要的文本字串定义在文件strings.xml,定义了上述四个组件(不包括WebView)的显示文本

1 
2 3
WebView
4 5
Hello world!
6
Settings
7 8
请输入网址
9
上一页
10
下一页
11
刷新
12 13

  

3、java实现

  主文件MainActivity.java,实现了各个组件所应该完成的功能

1 package com.xxx.webview;  2   3 import java.util.Timer;  4   5 import java.util.Timer;  6 import java.util.TimerTask;  7 import java.util.regex.Matcher;  8 import java.util.regex.Pattern;  9  10 import android.app.Activity; 11 import android.graphics.Bitmap; 12 import android.os.Bundle; 13 import android.os.Handler; 14 import android.os.Message; 15 import android.view.KeyEvent; 16 import android.view.Menu; 17 import android.view.View; 18 import android.view.View.OnClickListener; 19 import android.webkit.WebView; 20 import android.webkit.WebViewClient; 21 import android.widget.ArrayAdapter; 22 import android.widget.AutoCompleteTextView; 23 import android.widget.Button; 24 import android.widget.Toast; 25  26 public class MainActivity extends Activity { 27  28     AutoCompleteTextView url; 29     WebView show; 30  31     String[] urlArray = new String[] 32         { 33             "www.baidu.com", "www.bing.com" 34         }; 35  36     @Override 37     public void onCreate(Bundle savedInstanceState) { 38         super.onCreate(savedInstanceState); 39         setContentView(R.layout.activity_main); 40  41         final Activity activity = this; 42  43         show = (WebView)findViewById(R.id.show); 44         show.getSettings().setJavaScriptEnabled(true); 45         show.getSettings().setBuiltInZoomControls(true); 46         show.setWebViewClient(new WebViewClient() { 47             public boolean shouldOverrideUrlLoading(WebView view, String strUrl) { 48                 view.loadUrl(strUrl); 49                 url.setText(strUrl); 50                 return false; 51             } 52  53             public void onPageStarted(WebView view, String strUrl, Bitmap favicon) { 54                 super.onPageStarted(view, strUrl, favicon); 55                 url.setText(strUrl); 56             } 57  58             public void onPageFinished(WebView view, String strUrl) { 59             } 60  61             public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 62                 Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show(); 63             } 64         }); 65  66  67         url = (AutoCompleteTextView)findViewById(R.id.url); 68         ArrayAdapter
urlAdapter = new ArrayAdapter
(this, android.R.layout.simple_dropdown_item_1line, urlArray); 69 url.setAdapter(urlAdapter); 70 url.setOnKeyListener(new View.OnKeyListener() 71 { 72 public boolean onKey(View v, int keyCode, KeyEvent ev) 73 { 74 if (keyCode == KeyEvent.KEYCODE_ENTER) 75 { 76 String strUrl = url.getText().toString(); 77 78 Pattern p = Pattern.compile("http://([\\w-]+\\.)+[\\w-]+(/[\\w-\\./?%=]*)?"); 79 Matcher m = p.matcher(strUrl); 80 if (!m.find()) 81 { 82 strUrl = "http://" + strUrl; 83 } 84 85 show.loadUrl(strUrl); 86 87 return true; 88 } 89 90 return false; 91 } 92 }); 93 94 // button 95 final Button backBtn = (Button)findViewById(R.id.back); 96 final Button forwardBtn = (Button)findViewById(R.id.forward); 97 Button refreshBtn = (Button)findViewById(R.id.refresh); 98 backBtn.setEnabled(false); 99 forwardBtn.setEnabled(false);100 101 backBtn.setOnClickListener(new OnClickListener()102 {103 public void onClick(View v)104 {105 show.goBack();106 }107 });108 109 forwardBtn.setOnClickListener(new OnClickListener()110 {111 public void onClick(View v)112 {113 // TODO114 show.goForward();115 }116 });117 118 refreshBtn.setOnClickListener(new OnClickListener()119 {120 public void onClick(View v)121 {122 // TODO123 String strUrl = url.getText().toString();124 show.loadUrl(strUrl);125 }126 });127 128 final Handler handler = new Handler()129 {130 @Override131 public void handleMessage(Message msg)132 {133 if (msg.what == 0x1111)134 {135 // whether can go back136 if (show.canGoBack())137 {138 backBtn.setEnabled(true);139 }140 else141 {142 backBtn.setEnabled(false);143 }144 145 // whether can go forward146 if (show.canGoForward())147 {148 forwardBtn.setEnabled(true);149 }150 else151 {152 forwardBtn.setEnabled(false);153 }154 }155 156 super.handleMessage(msg);157 }158 };159 160 // create thread to change button states161 new Timer().schedule(new TimerTask()162 {163 public void run()164 {165 Message msg = new Message();166 msg.what = 0x1111;167 handler.sendMessage(msg);168 }169 }, 0, 100);170 }171 172 @Override173 public boolean onKeyDown(int keyCode, KeyEvent event) {174 175 if ((keyCode == KeyEvent.KEYCODE_BACK) && show.canGoBack())176 {177 show.goBack();178 return true;179 }180 181 return super.onKeyDown(keyCode, event);182 }183 184 }

 

4、权限添加

  千万不能少了网页访问等操作所需要的权限,在AndroidManifest.xml文件中加入以下代码

1 
2
3
4
5
6

  当然仅仅对于网页访问来说,上面列出的几个不都是必须的,这里主要是为以后进一步的功能实现做准备。

  

5、代码分析

  这里,主要介绍一下主文件MainActivity.java中几个值得注意并且比较有用的知识点。

  a) 定义了一个网址数组urlArray,利用它的值生成一个ArrayAdapter赋给了AutoCompleteTextView,然后为网址编辑框添加OnKeyListener,并设置了匹配及自动弹出匹配结果的响应代码;代码从68行开始;

  b) 定义了一个定时、消息发送与处理模块,使得程序每个0.1秒检查一次当前网页浏览情况,相应地对上一页及下一页的按钮状态进行改变;代码从128行开始;Timer类的schedule()方法第二个参数表述执行run()函数的延迟时间,这里设置为0(无延迟);

  c) 网页的上一页、下一页及资源导入方法也是现成的,分别为goBack()、goForward()及loadUrl(),至于刷新操作,其实就是重新导入一次资源(获取最新的);

  d) 最后还实现了手机返回键的响应(这里主要是针对返回上一页,所以需判断是否可以返回,否则交给父类去处理);可以看到,在之前也进行了上一页、下一页的操作判断,方法分别为canGoBack()、canGoForward();

  其他的代码实现都是一些常规的,就不一一描述了。

 

6、结果图

  初始界面:

  

  输入网址:

  

  网页访问:

  

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

你可能感兴趣的文章
Android Paint和Color类
查看>>
java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport
查看>>
hibernate--多对一单向关联 (重点!!!)
查看>>
Leetcode 3 - longest-substring-without-repeating-characters
查看>>
封装HttpClient进行http请求与https请求
查看>>
Oracle EBS-SQL (SYS-15):查询表空间2.sql
查看>>
Single Number | LeetCode OJ 解题报告
查看>>
[android]实现拖动效果
查看>>
SQL2008避免出错(聚合函数+Over用法)
查看>>
C#调用SQL Server分页存储过程
查看>>
Microsoft SQL Server 2017无法连接到WMI提供程序。您没有权限或者该服务器无法访问...问题的解决方法...
查看>>
解决TortoiseGit连接Bonobo Git Server时老是需要“输入用户名与密码”的问题
查看>>
zTree的使用2
查看>>
希尔排序代码实现
查看>>
赫夫曼树及其应用
查看>>
100——第5例
查看>>
[2019.2.28]BZOJ2118 墨墨的等式
查看>>
Hyper-v带宽限制以及验证工具
查看>>
C++中的预处理
查看>>
实现html页面的参数传递
查看>>