android app需要通过手机显示网页信息还是比较常用的,比如我最近业余开发的 抢商铺游戏,需要对游戏规则做说明,规则会比较多,而且要经常变动,就想到用网页来展示,更新起来方便,不像应用,一旦发布出去,就很难更改。

言归正传,下面介绍下我对系统webview的使用,做的一个简单浏览器,无图无真像,先看看图(博客园不能传图片,等图片功能恢复了再传):

首先是布局文件的编辑activity_browser.xml

采用RelativeLayout布局,不知道为什么采用LinearLayout布局不行。

浏览器标题栏有三个控件,分别为Button, TextView, Button,用来执行返回,显示网页titile, 刷新操作。

在标题栏下面展示webview控件

<RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
> <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="54dp"
android:id="@+id/title" > <!-- 导航栏左边按钮 --> <Button
android:id="@+id/nav_left_btn"
android:layout_width="50dip"
android:layout_height="45dip"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_marginLeft="8dp"
android:layout_alignParentLeft="true"
android:gravity="center"
android:visibility="invisible" >
</Button> <!-- 导航栏文字 --> <TextView
android:id="@+id/nav_titile_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:gravity=""
android:text=""
android:textColor="@color/white"
android:textSize="20sp" /> <!-- 导航栏右边按钮 -->
<Button
android:id="@+id/nav_right_btn"
android:layout_width="50dip"
android:layout_height="45dip"
android:layout_centerVertical="true"
android:layout_gravity="center_vertical"
android:layout_alignParentRight="true"
android:layout_marginRight="8dp"
android:gravity="center"
android:visibility="invisible" >
</Button>
</RelativeLayout> <WebView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_below="@id/title"
android:id="@+id/webView"/>
</RelativeLayout>

接着就是Activity的实现部分

在实现webview的时候,有2个地方要注意下

(1)如果网页是是中文,gbk编码,必须设置webview的默认编码值

     webView.getSettings().setDefaultTextEncodingName("gbk");

(2)如果网页有js,必须开启js,不然显示会有问题。特别是针对html5适配的网页,我采用Jquery mobile 做的一个网页,展示就有问题。刚开始只能显示纯文本,后来开启了js执行权限,就能正常显示了。

 webView.getSettings().setJavaScriptEnabled(true);

---
package com.onevo.activity;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.TextView; import com.onevo.R; /**
* 显示第tabhost 的第一个Activity,本activity 主要显示设备列表
*
* @author Administrator
*
*/
public class BrowserActivity extends Activity
{
private WebView webView;
private ProgressDialog mPgrogressDialog;
private TextView tv_title; private Button btn_left;
private Button btn_right; private String url = "http://114.215.171.166/level.html"; public void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_browser); //获取传递的参数
Intent it = getIntent();
String u = it.getStringExtra("url");
if(!TextUtils.isEmpty(u)){
url = u;
} webView = (WebView) this.findViewById(R.id.webView);
tv_title = (TextView)this.findViewById(R.id.nav_titile_textview);
btn_left = (Button) this.findViewById(R.id.nav_left_btn);
btn_right = (Button) this.findViewById(R.id.nav_right_btn); btn_left.setVisibility(View.VISIBLE);
btn_right.setVisibility(View.VISIBLE);
btn_left.setText("返回");
btn_right.setText("刷新"); //返回事件
btn_left.setOnClickListener(new OnClickListener()
{ @Override
public void onClick(View v)
{
finish();
}
}); //刷新事件
btn_right.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mPgrogressDialog.show();
webView.loadUrl(url);
}
}); // 显示网页加载中的小菊华花
mPgrogressDialog = new ProgressDialog(this);
mPgrogressDialog.setTitle("");
mPgrogressDialog.setMessage("正在加载网页...");
mPgrogressDialog.show(); webView.getSettings().setDefaultTextEncodingName("gbk"); //在线程里启动网页加载
new Thread(new Runnable()
{
@Override
public void run()
{
webView.loadUrl(url); }
}).start(); webView.getSettings().setJavaScriptEnabled(true); webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title)
{
// TODO Auto-generated method stub
super.onReceivedTitle(view, title);
final String tmpTitle = title;
runOnUiThread(new Runnable()
{
@Override
public void run()
{
tv_title.setText(tmpTitle);
}
});
}
}); webView.setWebViewClient(new WebViewClient()
{
public boolean shouldOverrideUrlLoading(WebView view, String url)
{
view.loadUrl(url);
return true;
}
@Override
public void onPageFinished(WebView view, String url)
{ super.onPageFinished(view, url); runOnUiThread(new Runnable()
{ @Override
public void run()
{
mPgrogressDialog.dismiss();
}
}); }
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon)
{
super.onPageStarted(view, url, favicon);
}
});
}
}

 

至此,一个简单的内嵌浏览器就开发完成了。

如果用WebView点链接看了很多页以后,如果不做任何处理,点击系统返回(Back)键,整个浏览器会调用finish()方法而结束自身,如果希望浏览的网页回退而不是退出浏览器,需要在当前Activity中处理并消费掉该Back事件。

  覆盖Activity类的onKeyDown(int keyCoder,KeyEvent event)方法。
  public boolean onKeyDown(int keyCode,KeyEvent event){
    if(webView.canGoBack() && keyCode == KeyEvent.KEYCODE_BACK){
      webview.goBack();// goBack()表示返回webView的上一页面
      return true;
    }
    return false;
  }

android 浏览器开发实例的更多相关文章

  1. android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)

    如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...

  2. Android 应用开发实例之情景模式

    2013-07-01 Android 应用开发实例 1. 情景模式 使用TabHost来实现主界面的布局. 设置一组RadioButton来切换不同的情景模式. 对比普通情景模式,定时情景模式需要加上 ...

  3. Android NDK开发实例教程

    WINDOWS系统+ Eclipse + NDK+Android 最近开始学习Android平台开发,Android还没有玩转,Java也是刚入门,这又要开始在Android中调用C语言,需要利用ND ...

  4. Android计算器开发实例

    Android简单计算器开发实例如图: ==================================================== activity_main.xml 代码如下: < ...

  5. android浏览器开发小技巧集锦(转)

    本人和朋友们做了一段时间浏览器,将一些小技巧分享出来,先写一部分,慢慢写,同时也为我们的浏览器打打广告 我们的浏览器将要上线,名叫沙发浏览 1.网页内的右键菜单 public boolean onLo ...

  6. Android网络开发实例(基于抓包实现的网络模拟登录,登出和强制登出)

    学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学 ...

  7. Android应用开发实例篇(1)-----简易涂鸦板

    链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378328.html 一.概述 这次要做一个简单的涂鸦板应用,以前在Qt上实现过,突然想 ...

  8. Android 浏览器开发WebView setBlockNetworkImage本末

    含义本身防止网络数据图片 webSettings.setBlockNetworkImage(true); 停止发布数据 webSettings.setBlockNetworkImage(false); ...

  9. Android 应用开发实例之文件管理器

    2013-07-02 10.2 文件管理器 能够浏览和管理手机/存储卡上的文件和文件夹,包括重命名.删除.新建.复制.粘帖等文件操作. 由于需要浏览大量的文件/文件夹,所以需要使用一个ListView ...

随机推荐

  1. 基于SWFUpload的angular上传组件

    回顾 由于工作内容比较多,特别是架构方面,需要耗费很多的时间调整.重构,因此很久没有写文章了. 话就不多说了,直接进入主题. 实现 首先分析一下SWFUpload初始化的时候,需要传入当前触发上传的元 ...

  2. 【PRML读书笔记-Chapter1-Introduction】1.2 Probability Theory

    一个例子: 两个盒子: 一个红色:2个苹果,6个橘子; 一个蓝色:3个苹果,1个橘子; 如下图: 现在假设随机选取1个盒子,从中.取一个水果,观察它是属于哪一种水果之后,我们把它从原来的盒子中替换掉. ...

  3. C++的最佳特性(译)

    最近看到了很多优秀的文章,包括<Why mobile web apps are slow>,实在忍不住翻译出来跟大家分享.这篇文章通过大量的实验和参考文献向我们说明移动应用开发所遇到的问题 ...

  4. [linux]记录如何设置一个新的vps

    背景 我正在做一个小项目,做好了打算上线,所有需要买个服务器,看了一圈,发现还是卖个vps合算.买了之后,进行了一些列的设置,这里记录一下,以便后面查看. 系统: ubuntu 内存:1G 一.更改时 ...

  5. [Logstash]使用详解

    Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的.多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件. 本文针对官方文档进行翻译以及实践,希望有更 ...

  6. CentOS6.5菜鸟之旅:安装ATI显卡驱动

    一.前言 自从安装了CentOS,我的显卡就没消停过,一直在彪高温而且噪音特别大,于是决定上网搜索解决办法.下面记录下来以供日后查阅. 二.安装fglrx driver(ATI/AMD 显卡的linu ...

  7. jQuery对Table一个字段排序

    最近做一个机票的系统,要对航班信息进行排序,所以整理了一下,把排序的方法写下来. 首先table的结构大概如下 最后显示的样式为 首先在每一个tr上加一个自定义属性:data-sort-field-f ...

  8. [Architect] Abp 框架原理解析(3) DynamicFilters

    本节目录 介绍 定义Filter 设置Filter 这是Abp中多租户.软删除.激活\禁用等如此方便的原因 Install-Package EntityFramework.DynamicFilters ...

  9. win8.1安装开发工具vs2013.3+mssql2012全程

    几个常用的命令 重起计算机命令:shoutdown.exe -r -t 0 立刻重起 在远程桌面中没有关机重起的选项,这个命令是必须的 远程桌面连接:mstsc 硬件环境:I7 4770 64RAM ...

  10. 重构第17天提取父类(Extract SuperClass)

    今天的重构来自 Martin Fowler的http://refactoring.com/catalog/extractSuperclass.html. 理解:本文中的“提取父类”是指类中有一些字段或 ...