




已阅读5页,还剩23页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android 简易web浏览器制作及代码解析一:浏览器效果进入首页界面 进入主浏览界面 进入浏览历史界面该简易浏览器主要是由以上三个界面构成,三个界面的布局分别为frontpage.xml,activity_main.xml,displayhistory.xml。下面对该浏览器的所有涉及到的技术细节一一叙述。二:主浏览界面介绍主浏览界面的布局文件是:activity_main.xml,代码如下: 代码的解析:因为是要制作简易浏览器,此处,我在布局文件中加入了一个WebView 用来解析http协议获取网页数据(其实这一步,google已经帮我们完成了,因此相当的方便,只需用函数调用即可,具体稍后再将)ProgressBar 用来显示网页打开的状态,就是这个样子的相信,对一个浏览器来说,这个是必不可少的,否则,从用户体验上来讲,是很不爽的。从布局文件上看,主浏览界面有一个EditText用来输入网址ImageButton 点击进入网址 全屏 查看历史记录 刷新 前一页 后一页 返回主页 其他设置 退出程序这些ImageButton都要设置响应的响应事件,这个在主程序的设计中将要实现1.首先对于WebView访问网络在主程序中,代码如下(主浏览页面被加载):webView = (WebView) this.findViewById(R.id.wv);webView.getSettings().setJavaScriptEnabled(true); /支持javascriptwebView.getSettings().setBuiltInZoomControls(true); /支持缩放webView.loadUrl(web_url);webView.setWebViewClient(new WebViewClient() public boolean shouldOverrideUrlLoading(WebView view, String url) if(url!=null) webView.loadUrl(url); return true; );为实现用进度条显示网页打开进度,还需要加上下列代码:pb_web = (ProgressBar) this.findViewById(R.id.pb_web);webView.setWebChromeClient(new WebChromeClient() public void onProgressChanged(WebView view, int progress) pb_web.setProgress(progress); if(progress = 100) pb_web.setProgress(0); );为了避免函数调用时候,变量的作用域受限,可以将webView,pb_web设置为全局变量2.输入后点击,让WebView载入网页 public void click_search(View view) String url=http:/+et_url.getText().toString().trim(); webView.loadUrl(url); et_url.setText();注意,webview识别的url需要加入http:/,这样的http请求才是合法的3.点击实现全屏,同时图标将变为,实现全屏前后变化如下全屏后全屏前 因此实现全屏后要隐藏下面的所有ImageButton,以及上面的手机状态框,所有的ImageButton是在同一个LinearLayout中,给LinearLayout付个id,在程序中通过id找到对象,然后对其操作,实现代码为:public void click_search(View view) String url=http:/+et_url.getText().toString().trim(); webView.loadUrl(url); et_url.setText(); public void click_fullscreen(View view) ImageButton ib_screen = (ImageButton) this.findViewById(R.id.ib_screen); if(fullscreenflag) setFullScreen(); ib_screen.setImageResource(R.drawable.exitfullscreen); ll_buttom.setVisibility(View.INVISIBLE); webView.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); else quitFullScreen(); ib_screen.setImageResource(R.drawable.fullscreen); ll_buttom.setVisibility(View.VISIBLE); webView.setLayoutParams(new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, 630); fullscreenflag = !fullscreenflag; private void setFullScreen() this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); private void quitFullScreen() final WindowManager.LayoutParams attrs = this.getWindow().getAttributes(); attrs.flags &= (WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attrs); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); 从代码中可以知道:退出全屏和进入全屏,全屏按钮图标和退出全屏按钮图标将发生更替,另外需要设置一个booblean类型的全局变量,显示是否为全屏状态fullscreenflag4.点击退出按钮其实所有的退出按钮都可以用同一段代码public void exitDialog() Dialog dialog=new AlertDialog.Builder(MainActivity.this) .setTitle(程序退出?) .setMessage(您要退出吗) .setPositiveButton(确定, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) MainActivity.this.finish();/操作结束 ) .setNegativeButton(取消, new DialogInterface.OnClickListener() public void onClick(DialogInterface dialog, int which) ) .create(); dialog.show(); 只需调用 public void click_exit(View view) exitDialog(); 即可,效果为一个退出对话框Dialog5.点击上一页,代码如下public void click_uppage(View view) webView.goBack();6.点击下一页,代码如下:public void click_nextpage(View view) webView.goForward();7.点击回到主页,代码如下:public void click_firstpage(View view) setContentView(R.layout.frontpage);8.点击刷新,代码如下:public void click_uppage(View view) webView.goBack();9.点击设置,代码如下: public void click_menu(View view) /懒得弄了,待定义三:历史浏览界面介绍1.点击查看历史按钮这是个重头戏,所谓的查看历史记录,那就涉及到数据的存储,也就是IO流,浏览历史记录界面如上图所示布局文件为displayhistory.xml,代码为: 从代码中可以看出,主要用的是ListView来装载浏览历史记录,每一个历史浏览记录由三部分组成,URL、NO、Time在每次浏览网页时候,将动态的存储浏览网页的URL,浏览网页Time,以及存储的No,为了存储数据,可以用数据库来存储:2.定义一个SearchHistory.java类public class SearchHistory private int id ;private String searchurl;private String searchtime;public SearchHistory(int id,String searchurl,String searchtime) this.id = id;this.searchurl = searchurl;this.searchtime = searchtime;public String getSearchUrl()return searchurl;public String getSearchTime()return searchtime;3.定义SearchHistorySQLiteOpenHelper.java类public class SearchHistorySQLiteOpenHelper extends SQLiteOpenHelper public SearchHistorySQLiteOpenHelper(Context context) super(context, searchhistory.db, null, 1);public void onCreate(SQLiteDatabase db) db.execSQL(create table searchhistory (id integer primary key autoincrement,searchurl varchar(300),searchtime varchar(100);public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 其中onCreate方法在数据库的创建阶段建表,以后不再重复建表,为使得数据库能成功建立,调用时,需以下代码:SearchHistorySQLiteOpenHelper helper = new SearchHistorySQLiteOpenHelper(this);SQLiteDatabase db = helper.getWritableDatabase();必须有这样的一步才算正式创建了4.建立了数据库,编写代码SearchHistoryDao.java类对数据库进行增删改查 此处,我们只需要增、删、查操作,代码如下:public class SearchHistoryDao private SearchHistorySQLiteOpenHelper helper;public SearchHistoryDao(Context context)helper = new SearchHistorySQLiteOpenHelper(context);public void add(String currenturl,String currenttime)SQLiteDatabase db = helper.getWritableDatabase();db.execSQL(insert into searchhistory(searchurl,searchtime) values (?,?), new Stringcurrenturl,currenttime);public int deleteAll()SQLiteDatabase db = helper.getWritableDatabase();int number = db.delete(searchhistory, null, null);db.close();return number;public List findAll()SQLiteDatabase db = helper.getReadableDatabase();List SearchHistorys = new ArrayList();Cursor cursor = db.query(searchhistory, new Stringsearchtime,searchurl,id, null, null, null, null, null);while(cursor.moveToNext()int id = cursor.getInt(cursor.getColumnIndex(id);String searchurl =cursor.getString (cursor.getColumnIndex(searchurl);String searchtime = cursor.getString( cursor.getColumnIndex(searchtime); SearchHistory p = new SearchHistory(id,searchurl,searchtime); SearchHistorys.add(p);cursor.close();db.close();return SearchHistorys; 此类定义了add,deleteAll,以及findAll方法,用于历史浏览数据的增、清楚所有、载入数据的操作,是基础。5.定义完了数据库以及对数据库的操作后 我们需要完成的是数据的存储以及相应的载入A) 每次浏览网页的时候,需要同时存储网页网址到数据库,代码为: SearchHistoryDao dao = new SearchHistoryDao(MainActivity.this); String timeString = getCurrentTime(); dao.add(url,timeString); 其中: public String getCurrentTime() Time time = new Time(GMT+8); time.setToNow(); String timeString = +time.year+.+time.month+.+time.monthDay+ +(time.hour+8)+:+time.minute+:+time.second; return timeString; B)上述存储在 webView.setWebViewClient(new WebViewClient() public boolean shouldOverrideUrlLoading(WebView view, String url) if(url!=null) . SearchHistoryDao dao = new SearchHistoryDao(MainActivity.this); String timeString = getCurrentTime(); dao.add(url,timeString); return true; );中实现。6.点击,需要完成历史数据的载入,即从数据库中读数据public void click_searchhistory(View view) SearchHistoryDao dao = new SearchHistoryDao(MainActivity.this); List SearchHistorys = new ArrayList(); SearchHistorys = dao.findAll(); setContentView(R.layout.displayhistory); lv_displayhistory =(ListView)this.findViewById(R.id.lv_displayhistory); int index = SearchHistorys.size(); if(index=0) Toast.makeText(this, 当前没有历史记录, Toast.LENGTH_SHORT).show(); else ListMap data = new ArrayListMap(); Map map; for(int i=0;iindex-1;i+) SearchHistory searchHistory = SearchHistorys.get(i); String url = searchHistory.getSearchUrl(); String time = searchHistory.getSearchTime(); map = new HashMap(); map.put(URL, url); map.put(num, i+1); map.put(time, time); data.add(map); adapter = new SimpleAdapter(this,data,R.layout.list_item,new Stringnum,URL,time,new intR.id.tv_showid, R.id.tv_showsearchhistory,R.id.tv_showtime); lv_displayhistory.setAdapter(adapter); 为将历史浏览记录“刷”进ListView中,需要使用Adapter,即将数据进行适配,上述代码实现的功能是点击,进入浏览历史记录界面此时已经setContentView(R.layout.displayhistory)了因此接下来实现一下三个子功能:A) 删除全部记录public void click_clearhistory(View view) SearchHistoryDao dao = new SearchHistoryDao(MainActivity.this); dao.deleteAll(); Toast.makeText(this, 已经清空, Toast.LENGTH_SHORT).show(); click_searchhistory(view);B)回到主页public void click_goback(View view) setContentView(R.layout.activity_main); click_refresh(view
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环保设施施工安全责任协议
- 电力行业污染物排放总量控制保证协议
- 《手机游戏账号及虚拟财产授权与转让协议》
- 影视拍摄现场电力系统设计与备用电源配置合同
- 私人游艇卫星通讯系统租赁与安装服务合同
- 艺人演艺作品收益分配经纪合同
- 股票市场证券分析师助理派遣与市场动态监测协议
- 航空器维修基地空域申请补充协议
- 宠物连锁加盟店会员体系与积分管理协议
- DB42-T 2012-2023 土家族吊脚楼营造规程
- GB/T 1633-2000热塑性塑料维卡软化温度(VST)的测定
- GB/T 11032-2020交流无间隙金属氧化物避雷器
- 煤矿爆破工培训
- 液化石油气安全标签
- 水车租赁合同范本(3篇)
- 空港新城特勤消防站施工组织设计
- 北师大版三年级数学下册竞赛卷
- 2022山东历史高考答题卡word版
- 中医医院儿科建设与管理指南(试行)
- Q∕SY 1143-2008 三维地质建模技术要求
- 大地构造学派及其构造单元汇总
评论
0/150
提交评论