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 ...
随机推荐
- AngularJS快速入门指南14:数据验证
thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...
- eclipse启动不了
因为eclipse运行变得非常慢,我想再次增加一下eclipse的最大内存,以期待使eclipse能够快速的响应. 参照某些资料,我也不知道什么时候改成了这样: -vmargs-Xms512m-Xmx ...
- DIY一个前端模板引擎.(一)
前端MVVM 模式有点很多,完全摆脱了意大利面条式的代码.个人认为,所有MVVM 的框架基础就是一个高性能的JS模板引擎,它极大简化了 DOM 操作, 使页面渲染和业务逻辑彻底分离.为了理解模板引擎原 ...
- Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结
Atitit 图像清晰度 模糊度 检测 识别 评价算法 源码实现attilax总结 1.1. 原理,主要使用像素模糊后的差别会变小1 1.2. 具体流程1 1.3. 提升性能 可以使用采样法即可..1 ...
- Struts2--ONGL--值栈
ONGL:用来访问栈里对象属性的语言,通常由Struts标签来解析, 注意:要在接续OGNL的页面加入<%@ taglib prefix="s" uri="/str ...
- Mybatis中SqlMapper配置的扩展与应用(3)
隔了两周,首先回顾一下,在Mybatis中的SqlMapper配置文件中引入的几个扩展机制: 1.引入SQL配置函数,简化配置.屏蔽DB底层差异性 2.引入自定义命名空间,允许自定义语句级元素.脚本级 ...
- javase基础复习攻略《四》
本篇内容重点介绍JAVA中的异常处理机制,什么是JAVA异常?JAVA异常是JAVA提供的用于处理程序中错误的一种机制.所谓错误就是指在程序的运行过程中出现的一些异常事件(如:0溢出,数组下表越界,所 ...
- Angularjs中link函数参数含义小节
restrictE: 表示该directive仅能以element方式使用,即:<my-dialog></my-dialog>A: 表示该directive仅能以attribu ...
- androud 自定义属性
在values文件夹下新建的attrs.xml文件如下: format是该属性的一种单位:有 color,String,references等. <?xml version="1.0& ...
- 这10道javascript笔试题你都会么
1.考察this var length = 10; function fn() { console.log(this.length); } var obj = { length: 5, metho ...