Android网页浏览器的开发
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网页浏览器的开发的更多相关文章
- android网页打印,安卓网页打印,h5页面打印,浏览器打印,js打印工具
Android设备打印比较麻烦,一般设备厂商都提供原生app开发的SDK,我们web开发者为难了,不会原生开发啊 给大家提供一个思路,实现web加壳,利用打印浏览器实现 简单来说就是把我们的web页面 ...
- 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar
原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...
- EXT.NET高效开发(三)——使用Chrome浏览器的开发人员工具
这篇帖子老少皆宜,不分男女,不分种族,不分职业.俗话说:“磨刀不误砍柴工”.掌握一些开发工具的使用,对自己帮助是很大的(无论是用于分析问题,还是提高生产力).本篇就讲述如何利用Chrome浏览器(这里 ...
- 常见浏览器扩展开发笔记(chrome firefox 360 baidu qq sougou liebao uc opera)
浏览器扩展开发貌似时下很冷门啊,但是不少企业还是有类似的应用,360的抢票插件啊,笔者最近在做的网页翻译扩展之类的.笔者在开发的过程中,遇到了不少坑,说是坑,说白了就是各个厂商支持的API不统一导致的 ...
- 通过浏览器F12开发工具快速获取别的网站前端代码的方法
通过浏览器F12开发工具快速获取别的网站前端代码的方法 说明:直接另存为网页是比较老的做法,会有很多没用的东西下载下来.通过F12开发工具,sources获取到的是比较好的,有目录结构的源文件.
- 在浏览器上开发GO和Vue!(基于code-server)
在浏览器上开发GO和Vue!(基于code-server) 曾几何时,开发者们都被安装编程环境苦恼,尽管现在很多语言的开发环境已经不难装了,但是如果我们能有一个运行在云端的编译器,那么我们就可以随时随 ...
- 一步一步打造自己的Android图片浏览器(原创)
今天我们试着来制作一个自己的Android图片浏览器. 图片浏览器应该具有什么功能呢?鉴于不同的人不同的理解,这里提出一个基本的需求: 搜索手机内的所有图片,展示于一个列表中: 列表中展示的是图片的缩 ...
- Android 图片浏览器 从原来位置放大至全屏显示
android 图片浏览器 特点: 1.从网络加载图片,只需要传图片地址数组即可 2.点击图片,从原来位置放大至全屏 3.支持手势操作 4.完全自定义布局 项目源码请到GitHub下载:https:/ ...
- Android与Swift iOS开发:语言与框架对比
Swift是现在Apple主推的语言,2014年新推出的语言,比Scala等“新”语言还要年轻10岁.2015年秋已经开源.目前在linux上可用,最近已经支持Android NDK:在树莓派上有Sw ...
随机推荐
- oracle 表类型变量的使用
转载于:http://www.itxuexiwang.com/a/shujukujishu/oracle/2016/0216/89.html?1455872314 使用记录类型变量只能保存一行数据,这 ...
- Atitit paip.对象方法的实现原理与本质.txt
Atitit paip.对象方法的实现原理与本质.txt 对象方法是如何实现的1 数组,对象,字典1 对象方法是如何实现的 这显然是一个对象方法调用.但对象方法是如何实现的呢?在静态语言中,因为有编译 ...
- Atitit.会员卡(包括银行卡)api的设计
Atitit.会员卡(包括银行卡)api的设计 1. 银行卡的本质是一种商业机构会员卡1 2. 会员卡号结构组成1 2.1. ●前六位是:发行者标识代码 Issuer Identification N ...
- 阿里云 云解析使用方法/在阿里云ESC服务器解析域名并绑定服务器IP后上传文件通过域名访问步骤教程
第一步:登录阿里云官网,获取服务器ECS的指定公网IP地址. 1.输入阿里云官网账号进入首页,如下图: 2.点击进入"管理控制台",如下图: 3.点击"云服务器ECS&q ...
- 快速入门系列--NOSQL--07MongoDB
从我第一次听到Nosql这个概念到如今已经走过4个年头了,但仍然没有具体的去做过相应的实践.最近获得一段学习休息时间,购买了Nosql技术实践一书,正在慢慢的学习.在主流观点中,Nosql大体分为4类 ...
- Oracle 11g系列:视图
视图是数据库中特有的对象,视图用于存储查询,但不会存储数据(物化视图除外).这是视图和数据表的重要区别.Oracle中有4种视图:关系视图.内嵌视图.对象视图和物化视图. 1.关系视图 1>.创 ...
- 在MVC5和webAPI下是用Autofac依赖注入
很多书本中都提到依赖注入,控制反转等概念,这些都是为了实现松耦合层.组件和类目的. 常见的是使用Repository类分离Controller和Model的直接联系.而为了解除Repository类和 ...
- Kruskal算法(二)之 C++详解
本章是克鲁斯卡尔算法的C++实现. 目录 1. 最小生成树 2. 克鲁斯卡尔算法介绍 3. 克鲁斯卡尔算法图解 4. 克鲁斯卡尔算法分析 5. 克鲁斯卡尔算法的代码说明 6. 克鲁斯卡尔算法的源码 转 ...
- 哈夫曼树(二)之 C++详解
上一章介绍了哈夫曼树的基本概念,并通过C语言实现了哈夫曼树.本章是哈夫曼树的C++实现. 目录 1. 哈夫曼树的介绍 2. 哈夫曼树的图文解析 3. 哈夫曼树的基本操作 4. 哈夫曼树的完整源码 转载 ...
- java之Maven配置和springMvc的简单应用
初始springMvc这个框架,非常的陌生,而且幸好公司是通过maven这个代码管理工具,可以随时添加依赖.解决了很多问题在以后深入开发中. 项目结构: 通过结构中,pom.xml这个文件其实就说明这 ...