使用webView制作浏览器
xml文件:
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.example.webviewdemo1.MainActivity" >
- <WebView
- android:id="@+id/webView"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- />
- </LinearLayout>
源代码:
- package com.example.webviewdemo1;
- import android.app.Activity;
- import android.app.ProgressDialog;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.view.KeyEvent;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.webkit.WebChromeClient;
- import android.webkit.WebSettings;
- import android.webkit.WebView;
- import android.webkit.WebViewClient;
- public class MainActivity extends Activity {
- private String url="http://www.meizu.com/";
- private WebView webView;
- private ProgressDialog dialog;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- /*Uri uri = Uri.parse(url);//URL为要链接的地址
- Intent intent = new Intent(Intent.ACTION_VIEW,uri);//创建一个意图,将地址传入
- startActivity(intent);//开启活动
- */
- //!!!注意:一定要自定义网络权限,不然不能联网
// <uses-permission android:name="android.permission.INTERNET"/>- init();
- }
- private void init() {
- webView = (WebView) findViewById(R.id.webView);
- //webView加载本地资源
- //webView.loadUrl("file:///webViewDemo1//assets//example.html");
- //webView加载web资源
- webView.loadUrl(url);
- //覆盖webView默认通过第三方浏览器或者是默认浏览器打开网页的行为,使得网页可以在webView中打开
- webView.setWebViewClient(new WebViewClient(){
- @Override
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
- //返回值为true时控制网页在webView中打开,如果为false则是调用系统浏览器或者第三方浏览器去打开
- view.loadUrl(url);
- return true;
- }
- //webViewClient帮助webView去处理一些页面控制和请求通知
- });
- //启用支持javaScript
- WebSettings settings = webView.getSettings();
- settings.setJavaScriptEnabled(true);
- //提高速度
- //webView加载页面优先使用缓存加载,默认不使用缓存加载
- webView.setWebChromeClient(new WebChromeClient(){
- @Override
- public void onProgressChanged(WebView view, int newProgress) {
- //newProgress 1-100之间的整数
- if(newProgress==100){
- //网页加载完毕,关闭ProgressDialog
- closeProgress();
- }else{
- //网页开始加载,打开ProgressDialog
- openDialog(newProgress);
- }
- }
- private void openDialog(int newProgress) {
- if(dialog==null){
- dialog = new ProgressDialog(MainActivity.this);
- dialog.setTitle("正在加载");
- dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- dialog.setProgress(newProgress);
- dialog.show();
- }else{
- dialog.setProgress(newProgress);
- }
- }
- private void closeProgress() {
- if(dialog!=null&&dialog.isShowing()){
- dialog.dismiss();
- dialog=null;
- }
- }
- });
- }
- //改写物理按键
- @Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- if(keyCode==KeyEvent.KEYCODE_BACK){
- if(webView.canGoBack()){
- webView.goBack();//返回上一页面
- return true;
- }else{
- System.exit(0);//退出程序
- }
- }
- return super.onKeyDown(keyCode, event);
- }
- }
webView的一些其他配置:
- /**
- * 初始化webView的设置
- */
- private void initWebView() {
- WebSettings settings = wv.getSettings();
- /**
- * //WebView缓存的运用,可以加快网页加载的速度.缓存模式:
- Android的WebView有五种缓存模式
- 1.LOAD_CACHE_ONLY //不使用网络,只读取本地缓存数据
- 2.LOAD_DEFAULT //根据cache-control决定是否从网络上取数据。
- 3.LOAD_CACHE_NORMAL //API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
- 4.LOAD_NO_CACHE //不使用缓存,只从网络获取数据
- 5.LOAD_CACHE_ELSE_NETWORK //只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据
- */
- settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存
- //webViewClient帮助WebView去处理一些界面控制和请求的通知
- //启用支持javaScript(脚本语言)
- settings.setJavaScriptEnabled(true);
- settings.setPluginState(WebSettings.PluginState.ON);
- //解决无法根据浏览器居中显示内容的问题
- settings.setUseWideViewPort(true);
- settings.setLoadWithOverviewMode(true);
- //加了下面这句就能访问网络了,没加之前报:TypeError: Cannot call method 'getItem' of null at
- settings.setDomStorageEnabled(true);//使用Dom的本地存储机制,但是加了返回有点小bug,所以能不加就不加吧
- wv.setVisibility(View.VISIBLE);
- wv.setWebChromeClient(new WebChromeClient()); //加了才能播放视频
- }
- // webView.getSettings().setJavaScriptEnabled(true);
- // webView.getSettings().setDisplayZoomControls(true);// 设置显示缩放按钮
- // webView.getSettings().setSupportZoom(true); // 支持缩放
- // webView.getSettings().setBuiltInZoomControls(true);
- //方法一:
- // webView.getSettings().setUseWideViewPort(true);//让webview读取网页设置的viewport,pc版网页
- // webView.getSettings().setLoadWithOverviewMode(true);
- //方法二:
- webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);//适应内容大小
- // webView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);//适应屏幕,内容将自动缩放
- webView.getSettings().setBuiltInZoomControls(true);//可以缩放,但是会显示缩放的按钮
- webView.getSettings().setDisplayZoomControls(false);//隐藏缩放的按钮
- webView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);//把所有内容放大webview等宽的一列中
- //设置标题
- WebChromeClient wvcc = new WebChromeClient() {
- @Override
- public void onReceivedTitle(WebView view, String title) {
- super.onReceivedTitle(view, title);
- if(TextUtils.isEmpty(title)){
- title = "默认标题";
- }
- setThisTitle(title);
- }
- };
- // 设置setWebChromeClient对象
- webView.setWebChromeClient(wvcc);
使用webView制作浏览器的更多相关文章
- android 下 利用webview实现浏览器功能
android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...
- android利用WebView实现浏览器的封装
android提供了封装浏览器的接口,可以让开发者利用自己的view显示网页内容.今天又实现研究了一下,利用WebView显示浏览器内容,还可以利用 WebViewClient显示自己需要的内容. 参 ...
- [android] WebView自定义浏览器
在布局文件中添加<EditText/>和<Button/>控件, 在布局文件中添加<WebView/>控件 在Activity中获取WebView对象 调用WebV ...
- android WebView网页浏览器
组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...
- 用FireBreath制作浏览器插件
参考: http://blog.csdn.net/z6482/article/details/7486921 1.下载firebreath, 安装cmake, python. 2.在FireBreat ...
- 用ComboBox控件制作浏览器网址输入框
实现效果: 知识运用: ComboBox控件的FindString public int FindString(string s) //查找数据项集合中指定数据项的索引 和Select方法 publi ...
- ProgressBar+WebView实现自定义浏览器
当我们使用浏览器浏览网页时,总会看到下图页面的样子,上面是一个地址栏,地址栏下面显示加载进度,加载完成后进入页面内容,带颜色的进度条总是少不了的,那样子看起来也舒服,如何实现自定义手机浏览器功能呢? ...
- 处理ios webview 更新缓存本地css、js后webview缓存无法更新的问题
项目中需要使用app本地css.js,并且可以根据服务下发自动更新本地css.js.测试发现只要更新后的css或者js和更新前路径一致,webview加载的还是更新前的css.js.怀疑是webvie ...
- WebView加载本地html、js文件常见问题及解决办法
声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...
随机推荐
- Protobuf语言指南
Protobuf语言指南 l 定义一个消息(message)类型 l 标量值类型 l Optional 的字段及默认值 l 枚举 l 使用其他消息类型 l 嵌套类型 l 更新一个消息类型 ...
- Android的有关EditText的能多行显示但无法禁止自动换行的Bug!
需求: 使 EditText或TextView 支持 多行显示,但是不自动换行,即能水平滚动较长的内容. Bug: 想当然的,在XML定义中设置如下,应该就可以了. android:scrollHor ...
- use vagrant under win7
1.下载安装最新版的vagrant 和 visualbox 到https://vagrantcloud.com/search 搜索要的linux发行版,比如ubuntu 我们用最上面这个版本做测试 拷 ...
- 了解 MVC 应用程序执行过程
发送给基于 ASP.NET MVC 的 Web 应用程序的请求首先通过 UrlRoutingModule 对象(一个 HTTP 模块)进行传递. 此模块将分析请求并执行路由选择. UrlRouting ...
- 卡特兰数 BZOJ3907 网格 NOIP2003 栈
卡特兰数 卡特兰数2 卡特兰数:主要是求排列组合问题 1:括号化矩阵连乘,问多少种方案 2:走方格,不能过对角线,问多少种方案 3:凸边型,划分成三角形 4:1到n的序列进栈,有多少种出栈方案 NOI ...
- n & (n-1)
n&(n-1)作用:将n的二进制表示中的最低位为1的改为0,先看一个简单的例子: n = 10100(二进制),则(n-1) = 10011 ==>n&(n-1) = 10000 ...
- 《Genesis-3D开源游戏引擎完整实例教程-跑酷游戏篇06:移动版优化指南》--本系列完结
6.移动版优化指南 概述: 移动设备不同于目前的高端设备(Wii.Xbox 360和PS3),市场上的手机硬件是很有限的,并且所有的移动设备都是不一样的.像Adroid手机,由于品牌和出厂年限的不同, ...
- Linux PHP实现仿百度文库预览功能
1.安装openoffice: tar zxvf OOo_3.3.0_Linux_x86-64_install-rpm-wJRE_zh-CN.tar.gzcd RPEMrpm -ivh *.rpm安装 ...
- 我是如何理解Java抽象类和接口的
在面试中我们经常被问到:Java中抽象类和接口的区别是什么? 然后,我们就大说一通抽象类可以有方法,接口不能有实际的方法啦:一个类只能继承一个抽象类,却可以继承多个接口啦,balabala一大堆,就好 ...
- Java任务调度
最近项目要用到任务调度的相关知识,昨天信心满满的去官网学习,结果被坑个半死,我用的最新版的quartz,文档里说是兼容所有版本,但是代码连编译都报错,无奈只好从网上找资料,摸着石头过河总算有点眉目,在 ...