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设置最大高度:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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); } } }