博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 浏览器开发实例
阅读量:6413 次
发布时间:2019-06-23

本文共 4570 字,大约阅读时间需要 15 分钟。

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

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

 

 

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

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

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

在标题栏下面展示webview控件

 

接着就是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;
  }

转载地址:http://wxdra.baihongyu.com/

你可能感兴趣的文章
GNU make manual 翻译( 一百四十五)
查看>>
重构之美-走在Web标准化设计的路上[复杂表单]3 9 Update
查看>>
linux中的优先搜索树的实现--prio_tree【转】
查看>>
转载: 打造自己的asp.net验证控件
查看>>
重构之美-跨越Web标准,触碰语义网[开门见山:Microformat]
查看>>
git入门与实践【转】
查看>>
WPF 虚拟键盘
查看>>
储存卡无法打开专家教您怎么数据恢复
查看>>
彼得原理
查看>>
如何利用【百度地图API】,制作房产酒店地图?(下)——结合自己的数据库...
查看>>
[20171113]修改表结构删除列相关问题3.txt
查看>>
特征选择
查看>>
在Winform程序中设置管理员权限及为用户组添加写入权限
查看>>
RTMP直播到FMS中的AAC音频直播
查看>>
多能互补提速 加快我国能源转型和现代能源体系建设
查看>>
《JavaScript设计模式》——2.5 多种调用方式——多态
查看>>
Redis开发运维实践高可用和集群架构与实践(二)
查看>>
程序员的常见“谎话”:对,这是一个已知 Bug
查看>>
如何侦查SQL执行状态
查看>>
CentOS 7 命令行如何连接无线网络
查看>>