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 ...
随机推荐
- Linux网路编程系列-网络I/O模型
应用程序从网络中拿数据,要经历两个阶段:1.等待数据准备好-分组到达,被拷贝到内核缓冲区,组装数据报:2.数据从内核缓冲区拷贝至用户态应用程序的缓冲区.Unix下五个I/O模型: 阻塞I/O: 进程调 ...
- DDD~DDD从零起步架构说明
回到目录 看了传说中的弦哥对园子里.Net项目分层与文件夹结构大全(最佳架子奖,吐槽奖,阴沟翻船奖揭晓),我也来说说我的DDD架构吧,主要是看了微软NlayerApp之后,自己写的一个,以后将会应用到 ...
- NodeJS系列~第二个小例子,解决中文乱码的问题
返回目录 为了使页面支持的字符更多,所以编码使用UTF-8,注意,你的原js文件的编码也要是utf-8的,可以通过记事本进行编码的修改
- 第2讲 Redis常用命令与高级应用
目录 一.redis数据类型 5. sorted sets类型和操作 二.Redis常用命令 1.键值相关命令 2.服务器相关命令 三. redis高级应用 1. 给redis服务器设置密码 2.持久 ...
- Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
PO(persistant object) 持久对象 在 o/r 映射的时候出现的概念,如果没有 o/r 映射,没有这个概念存在了.通常对应数据模型 ( 数据库 ), 本身还有部分业务逻辑的处理.可以 ...
- [Java类加载器]Java中classLoader浅析.
本文为在公司内部TD上写的一篇小文, 主要讲解java中classLoader基础知识, 现在拿来这里分享一下. 一.问题 请在Eclipse中新建如下类,并运行它: 1 package java.l ...
- Atitit 项目培训与学校的一些思路总结
Atitit 项目培训与学校的一些思路总结 1.1. Overview implet review OIR学习大法1 1.2. "录取流程,对报名者唯一的要求是学习该项目所必须的先修知识和 ...
- 将图片的二进制字节字符串在HTML页面以图片形式输出
具体实现代码如下: 1.新建一个一般处理程序: Image.ashx using System; using System.Collections.Generic; using System.Linq ...
- 每天一个linux命令(42):kill命令
Linux中的kill命令用来终止指定的进程(terminate a process)的运行,是Linux下进程管理的常用命令.通常,终止一个前台进程可以使用Ctrl+C键,但是,对于一个后台进程就须 ...
- 第五节:表单标签的用法——value绑定和修饰符
1.表单标签的用法--value绑定和修饰符 value绑定的写法:v-bind:value 或者简写 :value 修饰符: lazy , Number , trim . 用法如: v-model ...