使用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);
原文地址:https://www.cnblogs.com/fangg/p/5583723.html