Android网页浏览器的核心Widget是包含了WebKit的WebView。

首先,布局文件activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" > <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40dp"
android:gravity="center" > <Button
android:id="@+id/btnEar"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="<<" /> <Button
android:id="@+id/btnPre"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text="<" /> <Button
android:id="@+id/btnNext"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text=">" /> <Button
android:id="@+id/btnLast"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"
android:text=">>" /> </LinearLayout> <LinearLayout
android:layout_width="fill_parent"
android:layout_height="40dp" > <EditText
android:id="@+id/edtUrl"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="5"
android:ems="10"
android:singleLine="true" > <requestFocus />
</EditText> <Button
android:id="@+id/btnGo"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:text="GO" /> </LinearLayout> <WebView
android:id="@+id/webMain"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" /> </LinearLayout>

布局文件相对简单,包含了几个Button,一个EditText,一个WebView。

Java文件MainActivity.java:

package com.hzhi.mybrowser;

import android.os.Bundle;
import android.app.Activity;
import android.graphics.Bitmap;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.EditText; public class MainActivity extends Activity implements OnClickListener{ // 控件
Button btnEar;
Button btnPre;
Button btnNext;
Button btnLast;
EditText edtUrl;
Button btnGo;
WebView webMain; // URL
String strUrl; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获得控件
getCon();
webMain.setWebViewClient(new MyWebViewClient());
} @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} // 获得控件
public void getCon(){
btnEar = (Button) findViewById(R.id.btnEar);
btnPre = (Button) findViewById(R.id.btnPre);
btnNext = (Button) findViewById(R.id.btnNext);
btnLast = (Button) findViewById(R.id.btnLast);
edtUrl = (EditText) findViewById(R.id.edtUrl);
btnGo = (Button) findViewById(R.id.btnGo);
webMain = (WebView) findViewById(R.id.webMain); btnEar.setOnClickListener(this);
btnPre.setOnClickListener(this);
btnNext.setOnClickListener(this);
btnLast.setOnClickListener(this);
edtUrl.setOnClickListener(this);
btnGo.setOnClickListener(this); // 设置JavaScript可用
webMain.getSettings().setJavaScriptEnabled(true);
webMain.setScrollBarStyle(View.SCROLLBAR_POSITION_DEFAULT);
} @Override
public void onClick(View v) {
if (v==btnEar)
{
if (webMain.canGoBackOrForward(-2)){
webMain.goBackOrForward(-2);
}
}
else if (v==btnPre)
{
if (webMain.canGoBack()){
webMain.goBack();
}
}
else if (v==btnNext)
{
if (webMain.canGoForward()){
webMain.goForward();
}
}
else if (v==btnLast)
{
if (webMain.canGoBackOrForward(2)){
webMain.goBackOrForward(2);
}
}
else if (v==edtUrl)
{ }
// 下载网页
else if (v==btnGo)
{
strUrl = edtUrl.getText().toString();
webMain.loadUrl("http://" + strUrl);
}
} // WebViewClient的处理类
class MyWebViewClient extends WebViewClient {
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
btnPre.setEnabled(webMain.canGoBack());
btnNext.setEnabled(webMain.canGoForward());
}
@Override
public void onPageFinished(WebView view, String url) {
if (webMain.getTitle() != null) {
MainActivity.this.setTitle(webMain.getTitle());
}
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
MainActivity.this.setTitle(url);
edtUrl.setText(url);
btnPre.setEnabled(webMain.canGoBack());
btnNext.setEnabled(webMain.canGoForward());
}
} }

Java文件主要是对WebView控件的操作。其中MyWebViewClient继承自WebViewClient,有更新网页访问历史(onUpdateVisitedHistory)、网页结束(onPageFinished)、网页开始(onPageStarted)等几个函数。

WebView.setWebViewClient(new MyWebViewClient())表示new一个MyWebViewClient实例作为浏览器,如果没有这行代码,会以Android系统已安装的浏览器浏览网页。

单击GO按钮时,使用loadUrl函数访问网页。

最后,在Manifest文件里面加上访问网络的android.permission.INTERNET权限,否则无法打开网页。

运行效果。

Android网页浏览器的开发的更多相关文章

  1. android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具

    Android设备打印比较麻烦,一般设备厂商都提供原生app开发的SDK,我们web开发者为难了,不会原生开发啊 给大家提供一个思路,实现web加壳,利用打印浏览器实现 简单来说就是把我们的web页面 ...

  2. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

  3. EXT.NET高效开发(三)——使用Chrome浏览器的开发人员工具

    这篇帖子老少皆宜,不分男女,不分种族,不分职业.俗话说:“磨刀不误砍柴工”.掌握一些开发工具的使用,对自己帮助是很大的(无论是用于分析问题,还是提高生产力).本篇就讲述如何利用Chrome浏览器(这里 ...

  4. 常见浏览器扩展开发笔记(chrome firefox 360 baidu qq sougou liebao uc opera)

    浏览器扩展开发貌似时下很冷门啊,但是不少企业还是有类似的应用,360的抢票插件啊,笔者最近在做的网页翻译扩展之类的.笔者在开发的过程中,遇到了不少坑,说是坑,说白了就是各个厂商支持的API不统一导致的 ...

  5. 通过浏览器F12开发工具快速获取别的网站前端代码的方法

    通过浏览器F12开发工具快速获取别的网站前端代码的方法 说明:直接另存为网页是比较老的做法,会有很多没用的东西下载下来.通过F12开发工具,sources获取到的是比较好的,有目录结构的源文件.

  6. 在浏览器上开发GO和Vue!(基于code-server)

    在浏览器上开发GO和Vue!(基于code-server) 曾几何时,开发者们都被安装编程环境苦恼,尽管现在很多语言的开发环境已经不难装了,但是如果我们能有一个运行在云端的编译器,那么我们就可以随时随 ...

  7. 一步一步打造自己的Android图片浏览器(原创)

    今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...

  8. Android 图片浏览器 从原来位置放大至全屏显示

    android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...

  9. Android与Swift iOS开发:语言与框架对比

    Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...

随机推荐

  1. Spring Trasnaction管理(1)- 线程间事务隔离

    问题导读 Spring中事务是如何实现的 Spring中各个线程间是如何进行连接.事务隔离的 Spring事务配置 Spring的事务管理应该是日常开发中总会碰到的,但是Spring具体是怎么实现线程 ...

  2. java代码效率优化

    [转载于http://blog.163.com/user_zhaopeng/blog/static/16602270820122105731329/] 1. 尽量指定类的final修饰符 带有fina ...

  3. 基础才是重中之重~stream和byte[]的概念与转化

    回到目录 多看几篇 之所以写这篇文章完全是因为最近在研究FastDFS这个分布式的文件存储系统,当然这不是我第一次研究它了,就像我们去看一本书,我们不会只看一篇,而是一次次,一篇篇,每看一次会有新的收 ...

  4. 带你走近AngularJS - 创建自定义指令

    带你走近AngularJS系列: 带你走近AngularJS - 基本功能介绍 带你走近AngularJS - 体验指令实例 带你走近AngularJS - 创建自定义指令 ------------- ...

  5. Searching for a valid kernel header path... The path "" is not a valid path to the ***** kernel headers. Would you like to change it? [yes]

    在centos 6.5安装vmtools时候,解压包,mount挂载后,安装pl过程中报 这个问题,半天没有解决,google 后发现这样就行了 I installed the kernel-deve ...

  6. 遍历后台的List,让前台的多选宽被选中

    后端代码: /** * 获取优惠卷分页信息 * * * @param ph * 包括查询条件以及分页查询条件 * */ @Override public DataGrid<AppCmsCoupo ...

  7. linux下配置mysql默认编码utf8

    linux下配置mysql默认编码utf8 下面是需要在对应地方加入的配置 [client] default-character-set=utf8 [mysqld] character-set-ser ...

  8. ubuntu下在apache部署python站点

    ubuntu下在apache部署python站点 我的是ubuntu14 32为的虚拟机,默认安装的python为3.4 环境:apache + mysql + django + python3 软件 ...

  9. 理论经典:TCP协议的3次握手与4次挥手过程详解

    1.前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务. 面向连接意味着两个使用TCP的应用(通常是一个客户和一 ...

  10. pycharm运行脚本为何不生成测试报告?

    今日使用python+selenium编写自动化测试脚本并执行过程中,使用pycharm运行结果后发现脚本运行无报错,脚本中的操作也正常被执行,但就是没有生成测试报告. 为什么呢,为什么呢,生成测试报 ...