WebView

 1 package com.example.gaoji;
 2 
 3 import android.app.Activity;
 4 import android.app.Notification;
 5 import android.app.NotificationManager;
 6 import android.app.PendingIntent;
 7 import android.app.ProgressDialog;
 8 import android.content.Context;
 9 import android.content.Intent;
10 import android.os.Bundle;
11 import android.support.v4.app.NotificationManagerCompat;
12 import android.text.Layout;
13 import android.view.KeyEvent;
14 import android.view.Menu;
15 import android.view.MenuItem;
16 import android.view.View;
17 import android.view.ViewGroup.LayoutParams;
18 import android.webkit.WebChromeClient;
19 import android.webkit.WebSettings;
20 import android.webkit.WebView;
21 import android.webkit.WebViewClient;
22 import android.widget.Button;
23 import android.widget.PopupWindow;
24 import android.widget.ProgressBar;
25 import android.widget.TextView;
26 //WebView
27 public class WebView_Demo extends Activity {
28     private WebView wv;
29     private ProgressDialog pd=null;
30     @Override
31     protected void onCreate(Bundle savedInstanceState) {
32         super.onCreate(savedInstanceState);
33         setContentView(R.layout.webview_layout);
34         wv = (WebView) findViewById(R.id.webView);
35         Button b=(Button) findViewById(R.id.web_button);
36         wv.loadUrl("http://www.baidu.com");//这样会直接调用系统浏览器打开
37         wv.setWebViewClient(new WebViewClient(){//解决办法
38             public boolean shouldOverrideUrlLoading(WebView view, String url) {
39                 //返回true的时候网页在webView中去打开,如果为false则是调用系统浏览器打开
40                 view.loadUrl(url);
41                 return true;
42             }
43         });
44         //网页加载进度的设置
45         wv.setWebChromeClient(new WebChromeClient(){
46             @Override
47             public void onProgressChanged(WebView view, int newProgress) {
48                 //newProgress 1-100之间的整数
49                 if(newProgress==100){//加载完毕,关闭进度条
50                     if(pd!=null && pd.isShowing()){//不为空且正在显示
51                         pd.dismiss();//取消显示
52                         pd=null;//方便下次
53                     }
54                 }else{//创建进度条
55                     if(pd==null){
56                         pd=new ProgressDialog(WebView_Demo.this);
57                         pd.setTitle("正在加载");
58                         pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//横向
59                         pd.setProgress(newProgress);
60                         pd.show();
61                     }else{
62                         pd.setProgress(newProgress);
63                         pd.show();
64                     }
65                 }
66             }
67         });
68         //WebView缓存的运用,可以加快网页加载的速度
69         wv.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//优先使用缓存
70         //webViewClient帮助WebView去处理一些界面控制和请求的通知
71         //启用支持javaScript(脚本语言)  页面缩放:getSettings().setBuiltInZoomControls(true);
72         WebSettings settings = wv.getSettings();
73         settings.setJavaScriptEnabled(true);
74         b.setOnClickListener(new View.OnClickListener() {//按钮监听器
75             @Override
76             public void onClick(View v) {
77                 Intent intent=new Intent();//跳转到另一个应用
78                 intent.setClassName("com.example.getcardsize","com.example.getcardsize.MainActivity5");
79                 startActivity(intent);
80             }
81         });
82     }
83     @Override//按键的控制避免按返回直接退出程序
84     public boolean onKeyDown(int keyCode, KeyEvent event) {
85         if(event.KEYCODE_BACK==keyCode){//点击了返回键
86             if(wv.canGoBack()){//如果能返回
87                 wv.goBack();//返回上一届面
88                 return true;
89             }else{
90                 System.exit(0);
91                 return true;
92             }
93         }
94         return super.onKeyDown(keyCode, event);
95     }
96 }

 耗时处理一般都需要使用子线程,网络连接的方式具体见java网络代码

import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

import com.my.myapp.R;
import com.my.myapp.utils.LogUtils;
import com.my.myapp.utils.ToastUtils;

/**
 * 在线视频点击后的跳转
 */
public class WebViewActivity extends AppCompatActivity {

    private WebView wv;
    private ProgressDialog pd=null;
    private String url;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_web_view);
        wv = (WebView) findViewById(R.id.activity_webView_online);
        url = getIntent().getStringExtra("url");
        LogUtils.i("tag","最开始地址:"+url);
        initWebView();
        loadUrl(url);
    }

    /**
     * 初始化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()); //加了才能播放视频
    }


    public void loadUrl(final String url){
        wv.loadUrl(url);//这样会直接调用系统浏览器打开
        // wv.loadUrl("https://www.douyu.com/");//这样会直接调用系统浏览器打开
        wv.setWebViewClient(new WebViewClient(){//解决办法
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //返回true的时候网页在webView中去打开,如果为false则是调用系统浏览器打开
                view.loadUrl(url);
                LogUtils.i("tag","地址:"+url);
                return true;
            }
        });
        //网页加载进度的设置
        wv.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                //newProgress 1-100之间的整数
                if(newProgress==100){//加载完毕,关闭进度条
                    if(pd!=null && pd.isShowing()){//不为空且正在显示
                        pd.dismiss();//取消显示
                        pd=null;//方便下次
                    }
                }else{//创建进度条
                    if(pd==null){
                        pd=new ProgressDialog(WebViewActivity.this);
                        pd.setTitle("正在加载");
                        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);//横向
                        pd.setProgress(newProgress);
                        pd.show();
                        LogUtils.i("tag","加载的地址:"+url);
                    }else{
                        pd.setProgress(newProgress);
                        pd.show();
                    }
                }
            }
        });
    }


    @Override//按键的控制避免按返回直接退出程序
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(event.KEYCODE_BACK==keyCode){//点击了返回键
            if(wv.canGoBack()){//如果能返回
                wv.goBack();//返回上一届面
                ToastUtils.makeText("网页返回");
                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }


    @Override
    protected void onResume() {
        super.onResume();
        wv.onResume();//开始播放
    }

    @Override
    protected void onPause() {
        super.onPause();
        wv.onPause();//停止播放
    }

    /**
     * 主要是把webview所持用的资源销毁,
     */
    @Override
    protected void onDestroy() {
        super.onDestroy();
        wv.loadUrl("about:blank");
        wv.stopLoading();
        wv.setWebChromeClient(null);
        wv.setWebViewClient(null);
        wv.destroy();
        wv = null;
    }

}

 调用外部浏览器:

/*Intent intent = new Intent();        
 intent.setAction("android.intent.action.VIEW");
 String url = ConnUrls.NURSE_REPORT+"?orderSendId="+doingOrder.getOrderSendId()+"&protectedPersonId="+doingOrder.getPersonId();
 Uri content_url = Uri.parse(url);   
 intent.setData(content_url);  
 startActivity(intent);*/

android中Webview与javascript的交互(互相调用)

http://blog.csdn.net/beyond0525/article/details/9374301

补充:

 

//      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设置最大高度:

import android.content.Context;
import android.util.AttributeSet;
import android.webkit.WebView;

/**
 * 不仅要在load之前设置max。如果用了max则不能够设置手势和放大缩小,否则会crash。
 * //设置可以支持缩放 // webView.getSettings().setSupportZoom(true);
 *
 * //设置出现缩放工具 //
 * webView.getSettings().setBuiltInZoomControls(true);
 *
 * 这两个要注释上。
 */
public class MyWebView extends WebView {
    private int mMaxHeight = -1;

    public MyWebView(Context context) {
        super(context);
    }

    public MyWebView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyWebView(Context context, AttributeSet attrs, int defStyle,
                     boolean privateBrowsing) {
        super(context, attrs, defStyle, privateBrowsing);
    }

    /**
     * 在加载网页之前设置最大高度
     * @param height
     */
    public void setMaxHeight(int height) {
        mMaxHeight = height;
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        if (mMaxHeight > -1 && getMeasuredHeight() > mMaxHeight) {
            setMeasuredDimension(getMeasuredWidth(), mMaxHeight);
        }
    }
}
View Code

 

posted @ 2016-04-19 19:35  ts-android  阅读(512)  评论(0编辑  收藏  举报