android 浏览器开发实例

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 浏览器开发实例

时间: 2024-07-31 19:27:42

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

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

如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http://www.tompda.com/c/article/11778/ 而实际上使用android平台对widget开发的支持,桌面便签类软件是很易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 1.MyNote的终于实现效果 为了提起大家阅读本文的兴趣,先

Android Widget 开发实例:桌面便签程序的实现详解和源码

桌面便签软件是Android上常用软件的一种,比如比较早的Sticky Note,就曾非常流行,而实际上使用android平台对widget开发的支持,桌面便签类软件是非常易于开发的. 本文通过逐步实现一个简单的桌面便签软件,和大家分享进行widget开发的过程和方法. 同时本程序提供完整的工程源码下载 免费下载地址在 http://linux.linuxidc.com/ 用户名与密码都是www.linuxidc.com 具体下载目录在 /pub/Android源码集锦/2011年/10月/An

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

学习Android有几个月了,最近喜欢上了网络编程,于是想通过Android写一些一个小程序用于连接外网.在这里非常感谢雪夜圣诞的支持,非常感谢,给我打开新的一扇门. 1.声明,本程序只能用于西南大学连接外网登录,其他网站需要自己进行抓包测试. 2.声明,本文更多的是关注网络抓包已经,本地构造,如果有什么错误,请尽情指教,非常感谢. 3.声明,最后源代码,以全部上传github,需要的同志可以自行下载,文章结尾会附带链接. 废话不多说,正文开始: 学校官网 第一步,首先需要实现的是登录操作: 当

Android计算器开发实例

Android简单计算器开发实例如图: ==================================================== activity_main.xml 代码如下: <TableLayout  xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:l

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

链接地址:http://www.cnblogs.com/lknlfy/archive/2012/03/03/2378328.html 一.概述 这次要做一个简单的涂鸦板应用,以前在Qt上实现过,突然想到要把它在Android上实现,呵呵,既简单又有趣. 二.实现 新建工程MyWall,修改/res/layout/main.xml文件,在里面添加一个SurfaceView和两个Button,用到了RelativeLayout布局,完整的main.xml文件如下: 1 <?xml version=&qu

使用c#开发的第一款APP的Android浏览器(创世纪篇)

闲来无事,利用c#编程语言开发Android浏览器. 首先,安装 VS2010.安装 Android SDK.配置 AVD(android) 模拟器. 调试的时候打开 ADV(android 模拟器) 在里面你自己添加一个机器的型号,设置好分辨率,内存大小,SD卡,启动之后,就可以调试了! 调试生成的代码是不能发布到真实的机器上的,因为 android 实际程序在真实机器中运行的时候会进行验证,这个在 netbeans 或 eclipse 里面叫 key.store 所以发布的时候,要用 net

Android手机拨打电话的开发实例

一部手机最常用的功能就是打电话和发短信了,在Android开发中我们如何通过程序拨打电话呢?本文就给出一个用Android手机拨打电话的简单的实例. 下面是开发此实例的具体步骤: 一.新建一个Android工程,命名为phoneCallDemo. 二.设计程序的界面,打开main.xml把内容修改如下: XML/HTML代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:and

Android开发——web浏览器开发(1) 版本1.0

1,建立一个新的项目 webdemo 2,layout下activity_main设计界面(1)待优化 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layo

Android开发实例之miniTwitter登录界面的实现

原文: http://www.jizhuomi.com/android/example/134.html 本文要演示的Android开发实例是如何完成一个Android中的miniTwitter登录界面,下面将分步骤讲解怎样实现图中的界面效果,让大家都能轻松的做出美观的登录界面. miniTwitter登录界面效果图 先贴上最终要完成的效果图: miniTwitter登录界面的布局分析 首先由界面图分析布局,基本可以分为三个部分,下面分别讲解每个部分. 第一部分是一个带渐变色背景的LinearL