zoukankan      html  css  js  c++  java
  • 使用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);
  • 相关阅读:
    DES加密/解密类。
    断言与单元测试
    空对象模式和扩展方法的NULL验证
    防御性判断
    行为型-观察者模式、基于事件的观察者
    【Python学习日记】B站小甲鱼:继承,super和多重继承
    【Python学习日记】B站小甲鱼:类和对象
    【Python学习日记】B站小甲鱼:图形界面入门easygui
    【Python学习日记】B站小甲鱼:丰富的else语句
    【Python学习日记】B站小甲鱼:永久储存(pickle模块)和异常处理(exception)
  • 原文地址:https://www.cnblogs.com/fangg/p/5583723.html
Copyright © 2011-2022 走看看