最近看android资料,随手写了个简单手机浏览器应用,该应用很简单,主要包括AutoCompleteTextView 、WebView、Button控件,但是涉及到了很多android开发常识,例如:权限管理、布局标题栏状态栏隐藏、开辟线程监听事件、子线程不能更新主线程UI等,下面介绍一下代码示例:

1,修改AndroidManifest.xml文件,首先添加上网和应用旋转权限, 如下:

    <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.SET_ORIENTATION"/>

在此也可以添加如下代码使应用全屏,即隐藏状态栏和标题栏

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

2, xml布局代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent" ><AutoCompleteTextViewandroid:id="@+id/url"android:layout_width="match_parent"android:layout_height="wrap_content"android:hint="@string/url"android:inputType="textUri" android:completionHint="@string/url"android:completionThreshold="1" /><WebViewandroid:id="@+id/show"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_above="@+id/btnLayout"android:layout_below="@+id/url" /><LinearLayoutandroid:id="@+id/btnLayout"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_alignParentLeft="true"android:layout_alignParentRight="true"android:orientation="horizontal" ><Buttonandroid:id="@+id/back"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/back" /><Buttonandroid:id="@+id/forward"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/forward" /><Buttonandroid:id="@+id/refresh"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/refresh" /><Buttonandroid:id="@+id/home"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_weight="1.0"android:text="@string/home" /></LinearLayout></RelativeLayout>

布局设计中要注意实现适应屏幕。

3, java代码

package com.example.webbrowser;import java.util.Timer;
import java.util.TimerTask;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import android.app.Activity;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.Toast;public class WebBrowser extends Activity {AutoCompleteTextView url;WebView show;String[] booksArray = new String[]{"http://maps.google.com","http://maps.baidu.com","http://qq.com","www.baidu.com","www.163.com"};@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_web_browser);final Activity activity = this;show = (WebView)findViewById(R.id.show);show.getSettings().setJavaScriptEnabled(true);show.getSettings().setBuiltInZoomControls(true);//show.getSettings().setDisplayZoomControls(false);show.setWebViewClient(new WebViewClient(){public boolean shouldOverrideUrlLoading(WebView view, String strUrl){view.loadUrl(strUrl);url.setText(strUrl);return false;}public void onPageStarted(WebView view, String strUrl, Bitmap favicon){super.onPageStarted(view, strUrl, favicon);url.setText(strUrl);}public void onPageFinished(WebView view, String strUrl){}public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {Toast.makeText(activity, "Oh no! " + description, Toast.LENGTH_SHORT).show();}});url = (AutoCompleteTextView)findViewById(R.id.url);ArrayAdapter<String> aa = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, booksArray);url.setAdapter(aa);url.setOnKeyListener(new View.OnKeyListener() {            public boolean onKey(View v, int keyCode, KeyEvent ev) {if (keyCode == KeyEvent.KEYCODE_ENTER){String strUrl = url.getText().toString();Pattern p = Pattern.compile("http://([\\w-]+\\.)+[\\w-]+(/[\\w-\\./?%=]*)?");Matcher m = p.matcher(strUrl);if (!m.find()){strUrl = "http://" + strUrl;}show.loadUrl(strUrl);return true;}return false;}});// button final Button backBtn = (Button)findViewById(R.id.back);final Button forwardBtn = (Button)findViewById(R.id.forward);Button refreshBtn = (Button)findViewById(R.id.refresh);Button homeBtn = (Button)findViewById(R.id.home);backBtn.setEnabled(false);forwardBtn.setEnabled(false);backBtn.setOnClickListener(new OnClickListener(){public void onClick(View v){show.goBack();}});forwardBtn.setOnClickListener(new OnClickListener(){public void onClick(View v){// TODOshow.goForward();}});refreshBtn.setOnClickListener(new OnClickListener(){public void onClick(View v){// TODOString strUrl = url.getText().toString();show.loadUrl(strUrl);}});homeBtn.setOnClickListener(new OnClickListener(){public void onClick(View v){// TODOshow.loadUrl("http://maps.google.com");}});final Handler handler = new Handler(){@Overridepublic void handleMessage(Message msg){if (msg.what == 0x1111){// whether can go back  if (show.canGoBack()){backBtn.setEnabled(true);}else{backBtn.setEnabled(false);}// whether can go forwardif (show.canGoForward()){forwardBtn.setEnabled(true);}else{forwardBtn.setEnabled(false);}}super.handleMessage(msg);}};// create thread to change button states new Timer().schedule(new TimerTask(){public void run(){Message msg = new Message();msg.what = 0x1111;handler.sendMessage(msg);}}, 0, 100);}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// Check if the key event was the Back button and if there's historyif ((keyCode == KeyEvent.KEYCODE_BACK) && show.canGoBack()){show.goBack();return true;}// If it wasn't the Back key or there's no web page history, bubble up to the default// system behavior (probably exit the activity)return super.onKeyDown(keyCode, event);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.activity_web_browser, menu);return true;}
}

除了AutoCompleteTextView输入URL和WebView显示网页内容外,应用底部有四个Button分别实现后退、前进、刷新、主页(暂未实现)等功能,到此就可以在android手机上使用自己的浏览器了。

4,应用截图:

Android 手机浏览器的开发相关推荐

  1. Android手机系统软件apk开发制作

    Android手机系统软件apk开发制作 随着Android安卓系统的日益广泛使用,越来越多人发现手机潜在的力量,当然手机应用软件app的朝阳也随之并进,手机app软件潜在着无线巨大的发展空间和利益金 ...

  2. yandex 浏览器 linux,细致比拼 六大Android手机浏览器实测

    12月1日 从20世纪八九十年代的第一代模拟的手机电话(简称手机),发展迄今大家所熟悉的手机已经不只是用来简单的通话,手机更成为与国际互联网等多媒体通信结合的新一代移动通信系统,而手机浏览器也逐渐成为 ...

  3. Android 浏览器内核浅谈,基于WebKit内核的Android手机浏览器的性能研究与加载优化...

    南京邮电大学 硕士 2017 基于WebKit内核的Android手机浏览器的性能研究与加载优化 Performance Research and Load Optimization of Andro ...

  4. iOS和Android手机浏览器链接打开app store或应用市场下载软件

    iOS和Android手机浏览器链接打开app store或应用市场下载软件 1.Android主流手机跳转链接 // androidId 如:com.xxx.app// oppo oppomarke ...

  5. android开发2021,2021年高校邦Android手机软件快速开发App Inventor【2021秋】满分答案...

    2021年高校邦Android手机软件快速开发App Inventor[2021秋]满分答案 更多相关问题 <模仿:西方文学中的现实的再现>作者是:A.霍布斯B.阿多诺C.奥尔巴赫D.米勒 ...

  6. iOS和Android手机浏览器链接打开app store或应用市场下载软件讲解

    引言 当开发一个app出来后,通过分享引流用户去打开/下载该app软件,不同手机下载的地方不一样,比如:ios需要到苹果商店去下载,Android手机需要到各个不同的应用商店去下载(华为手机需要到华为 ...

  7. android手机浏览器测评,QQ浏览器和800浏览器哪个好?安卓手机浏览器对比评测

    类型:网络浏览大小:630KB语言:中文 评分:10.0 标签: 立即下载 800浏览器app是一款可以省流量的手机浏览器,轻松上网,省流量.简洁,省电,省流,不驻留任何后台进程轻轻上推进入全屏,下拉 ...

  8. Android手机记账应用开发视频教程

    基于Android平台的手机记账应用开发全程实录(Activity间数据传递.SQLiteDatabase.AsyncTask) 课程分类:Android 适合人群:中级 课时数量:26课时 用到技术 ...

  9. android浏览器对比评测,还在为选择哪个浏览器而纠结?Android手机浏览器横向对比评测!...

    本文内容转自于互联网点评,并非本站立场观点! 随着Android系统的不断升温,国内的Android手机的销量已经出现井喷之势,作为智能手机,我们最常用的功能便是上网,也就是浏览网页,所以手机浏览器已 ...

最新文章

  1. Java 面试知识点解析(五)——网络协议篇
  2. 数据中心管理中的人工智能:其对人员配置和流程意味着什么?
  3. 32位选择进位加法器_32位加减法器设计
  4. ETL AUTOMATION介绍
  5. 中国上榜前50名富豪当中,有多少人完全是通过白手起家?
  6. MySQL笔记——多表查询
  7. 中国体力活动监测器(PAM)市场趋势报告、技术动态创新及市场预测
  8. 克里金插值c程序_C罗游艇晒太阳,坐下也有六块腹肌,乔治娜骄傲秀无名指上鸽子蛋...
  9. 通信网理论与应用第1章 通信网概述
  10. yii2 batchInsert批量插入
  11. 打开和关闭Hadoop,Hbase 命令
  12. 4399ATAPI讲解操作事件篇
  13. 西工大计算机学院导师赵歆波,黎永前_西北工业大学研究生导师信息
  14. 遥感中的数字量化值DN, 辐射亮度Radiance, 反射率Reflectance,发射率Emissive的意义
  15. 日企人力资源规章制度汇总
  16. 一键root大师 android,一键Root大师
  17. 西安电子科技大学-概率论与数理统计大作业-概率论与数理统计在日常生活和社会经济中的应用
  18. build.gradle配置
  19. 古希腊神话故事:纳鲁斯和普鲁吐斯
  20. 在abap中的SQL嵌套

热门文章

  1. 渗透测试 | UserInfo信息收集
  2. 新华三交换机密码重置
  3. js获取内网/局域网ip地址,操作系统,浏览器版本等信息
  4. Linux---基础部分
  5. python调用oracle
  6. 启动oracle时报错:PuTTY X11 proxy: unable to connect to forwarded X server: Network error:
  7. 学习CALCULATE函数(一)修订版
  8. 【无代码体验】用鲸智搭替换Excel表管理数据
  9. 结构化数据、半结构化数据、非结构化数据
  10. 用c#开发Android应用(二)——运行Hello World!