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制作浏览器的更多相关文章

  1. android 下 利用webview实现浏览器功能

    android 下 利用webview实现浏览器功能(一): 1.界面添加WEBVIEW控件. 2.在界面.JAVA代码页面(protected void onCreate(Bundle savedI ...

  2. android利用WebView实现浏览器的封装

    android提供了封装浏览器的接口,可以让开发者利用自己的view显示网页内容.今天又实现研究了一下,利用WebView显示浏览器内容,还可以利用 WebViewClient显示自己需要的内容. 参 ...

  3. [android] WebView自定义浏览器

    在布局文件中添加<EditText/>和<Button/>控件, 在布局文件中添加<WebView/>控件 在Activity中获取WebView对象 调用WebV ...

  4. android WebView网页浏览器

    组件位置:composite>WebView .xml <WebView android:id="@+id/webview_pipeweb" android:layou ...

  5. 用FireBreath制作浏览器插件

    参考: http://blog.csdn.net/z6482/article/details/7486921 1.下载firebreath, 安装cmake, python. 2.在FireBreat ...

  6. 用ComboBox控件制作浏览器网址输入框

    实现效果: 知识运用: ComboBox控件的FindString public int FindString(string s) //查找数据项集合中指定数据项的索引 和Select方法 publi ...

  7. ProgressBar+WebView实现自定义浏览器

    当我们使用浏览器浏览网页时,总会看到下图页面的样子,上面是一个地址栏,地址栏下面显示加载进度,加载完成后进入页面内容,带颜色的进度条总是少不了的,那样子看起来也舒服,如何实现自定义手机浏览器功能呢? ...

  8. 处理ios webview 更新缓存本地css、js后webview缓存无法更新的问题

    项目中需要使用app本地css.js,并且可以根据服务下发自动更新本地css.js.测试发现只要更新后的css或者js和更新前路径一致,webview加载的还是更新前的css.js.怀疑是webvie ...

  9. WebView加载本地html、js文件常见问题及解决办法

    声明:基于android studio平台,php语言搭建服务器 目录: 一.JavaScript脚本语言没有反应 二.alert无法弹出 三.html页面之间不能跳转 四.屏幕缩放没有达到预期效果 ...

随机推荐

  1. 《深入Java虚拟机学习笔记》- 第2章 平台无关

    Java虚拟机学习笔记(二)平台无关

  2. sublime3安装python插件 -- SublimeCodeIntel

    先装Package Control,类似pip的一个索引安装工具. 1.http://sublime.wbond.net/Package%20Control.sublime-package 2.sub ...

  3. Python中的导入

    转自:http://bingotree.cn/?p=569 参考<Python学习手册>,强烈建议看下这本书的相关章节. 在一些规模较大的项目中,经常可以看到通过imp.__import_ ...

  4. uvalive 4795 Paperweight

    题意:给出一个5个顶点的多面体以及多面体内一点P.求让 多面体不同的方式(即以不同的面)放在地面上,设这个着地的面为A,多面体重心在A上的投影为B,在保证B在A内部且距离A的各个边界不小于0.2的前提 ...

  5. 【转载】gcc和g++的区别

    [说明]本文转载自 静心 的文章 http://blog.163.com/lu_jun520/blog/static/5699613420116205148239/ 一般linux系统都自带了gcc编 ...

  6. dataStructure@ Check whether a given graph is Bipartite or not

    Check whether a given graph is Bipartite or not A Bipartite Graph is a graph whose vertices can be d ...

  7. [iOS基础控件 - 6.4] 汽车品牌展示 Model嵌套/KVC/TableView索引

    A.需求 1.使用汽车品牌名称头字母为一个Model,汽车品牌为一个Model,头字母Model嵌套品牌Model 2.使用KVC进行Model封装赋值 3.展示头字母标题 4.展示索引(使用KVC代 ...

  8. 你的iOS静态库该减肥了

    我有点震惊,国内的具有极少的有关静态库开发的内容,除了一些简单的如何教你开发,而且是原创还是copy,谁知道呢?细思极恐,不扯那么远了,这里就已切身的爬坑经历提供几个静态库瘦身的方案. 公司最近开发完 ...

  9. 【Stage3D学习笔记续】山寨Starling(五):纹理计算和尺寸计算

    尺寸计算: Starling中的尺寸是以像素为单位的,这一切都得力于我们使用的正交矩阵,还记得我们顶点数据中的位置数据么,如果我们提交的矩形的四个顶点为(0, 0)(0, 100)(100, 0)(1 ...

  10. thinkphp的目录结构

    ├─ThinkPHP.php 框架入口文件 ├─Common 框架公共文件 ├─Conf 框架配置文件 ├─Extend 框架扩展目录 ├─Lang 核心语言包目录 ├─Lib 核心类库目录 │ ├─ ...