webview 常用方法

简介: webview 常用方法 package com.orgcent.webview; import android.app.Activity; import android.os.Bundle; import android.

webview 常用方法

  1. package com.orgcent.webview;
  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.webkit.JsPromptResult;
  5. import android.webkit.JsResult;
  6. import android.webkit.WebChromeClient;
  7. import android.webkit.WebSettings;
  8. import android.webkit.WebView;
  9. import android.webkit.WebViewClient;
  10. import android.webkit.WebSettings.LayoutAlgorithm;
  11. public class AndroidWebViewActivity extends Activity {
  12.     @Override
  13.     public void onCreate(Bundle savedInstanceState) {
  14.         super.onCreate(savedInstanceState);
  15.         setContentView(R.layout.main);
  16.         WebView content_wv = (WebView) findViewById(R.id.content_wv);
  17.         WebSettings ws = content_wv.getSettings();
  18.         ws.setJavaScriptEnabled(true); // 设置支持javascript脚本
  19.         ws.setAllowFileAccess(true); // 允许访问文件
  20.         ws.setBuiltInZoomControls(true); // 设置显示缩放按钮
  21.         ws.setSupportZoom(true); //支持缩放
  22.         /**
  23.          * 用WebView显示图片,可使用这个参数
  24.          * 设置网页布局类型:
  25.          * 1、LayoutAlgorithm.NARROW_COLUMNS : 适应内容大小
  26.          * 2、LayoutAlgorithm.SINGLE_COLUMN:适应屏幕,内容将自动缩放
  27.          */
  28.         ws.setLayoutAlgorithm(LayoutAlgorithm.NARROW_COLUMNS);
  29.         ws.setDefaultTextEncodingName("utf-8"); //设置文本编码
  30.         ws.setAppCacheEnabled(true);
  31.         ws.setCacheMode(WebSettings.LOAD_DEFAULT);//设置缓存模式
  32.         //添加Javascript调用java对象
  33.         content_wv.addJavascriptInterface(this"java2js");
  34.         content_wv.setWebViewClient(new WebViewClientDemo());
  35.         content_wv.setWebChromeClient(new WebViewChromeClientDemo());
  36.         //设置打开的网页
  37.         content_wv.loadUrl("http://orgcent.com");
  38.         //使用WebView来显示图片
  39.         content_wv.loadData("<img src='http://orgcent.com'/>""text/html""utf8");
  40.     }
  41.     private class WebViewClientDemo extends WebViewClient {
  42.         @Override
  43.         public boolean shouldOverrideUrlLoading(WebView view, String url) {
  44.             view.loadUrl(url);// 当打开新链接时,使用当前的 WebView,不会使用系统其他浏览器
  45.             return true;
  46.         }
  47.     }
  48.     private class WebViewChromeClientDemo extends WebChromeClient {
  49.         // 设置网页加载的进度条
  50.         public void onProgressChanged(WebView view, int newProgress) {
  51.         }
  52.         // 获取网页的标题
  53.         public void onReceivedTitle(WebView view, String title) {
  54.         }
  55.         // JavaScript弹出框
  56.         @Override
  57.         public boolean onJsAlert(WebView view, String url, String message,
  58.                 JsResult result) {
  59.             return super.onJsAlert(view, url, message, result);
  60.         }
  61.         // JavaScript输入框
  62.         @Override
  63.         public boolean onJsPrompt(WebView view, String url, String message,
  64.                 String defaultValue, JsPromptResult result) {
  65.             return super.onJsPrompt(view, url, message, defaultValue, result);
  66.         }
  67.         // JavaScript确认框
  68.         @Override
  69.         public boolean onJsConfirm(WebView view, String url, String message,
  70.                 JsResult result) {
  71.             return super.onJsConfirm(view, url, message, result);
  72.         }
  73.     }
  74. }

(1)// 设置支持javascript脚本

mWebView.getSettings().setJavaScriptEnabled(true);

(2)// 支持通过js打开新的窗口

mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);

(3)当我们加载Html时候,会在我们data/应用package下生成database与cache两个文件夹:

1、缓存构成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db

缓存模式(5种)
LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据
LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。
LOAD_CACHE_NORMAL: API level 17中已经废弃, 从API level 11开始作用同LOAD_DEFAULT模式
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.
LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。

eg:mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);

—————————————————————————————————————————————————————————————

(4)mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);

1.这段代码设定了WebView的HTML布局方式,其中包含了下面的三个参数值
NORMAL:正常显示,没有渲染变化。
SINGLE_COLUMN:把所有内容放到WebView组件等宽的一列中。   //这个是强制的,把网页都挤变形了
NARROW_COLUMNS:可能的话,使所有列的宽度不超过屏幕宽度。 //好像是默认的

2.Android中Webview自适应屏幕

第一种:

     WebSetting settings = webView.getSettings();
     settings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
     把所有内容放在webview等宽的一列中。(可能会出现页面中链接失效)
 
第二种:
     settings.setUseWideViewPort(true);
     settings.setLoadWithOverviewMode(true);
 
第三种:
     DisplayMetrics metrics = new DisplayMetrics();
     getWindowManager().getDefaultDisplay().getMetrics(metrics);
     int mDensity = metrics.densityDpi;www.2cto.com
 
     if (mDensity == 120) {
               settings.setDefaultZoom(ZoomDensity.CLOSE);
          }else if (mDensity == 160) {
               settings.setDefaultZoom(ZoomDensity.MEDIUM);
          }else if (mDensity == 240) {
               settings.setDefaultZoom(ZoomDensity.FAR);
          }

 

—————————————————————————————————————————————————————————————

(5)mWebView.setHorizontalScrollBarEnabled(true);  mWebView.setVerticalScrollBarEnabled(true);  //设置是否显示滚动条

(6)mWebView.getSettings().setUserAgentString(USER_AGENT_STRING);// 设置支持各种不同的设备

(7)WebView显示html文件时,若要达到和PC上浏览器显示的效果完全一样,只需对WebView做一下设置即可:

适应全屏

39 适应竖屏

57 适应横屏

mWebView.setInitialScale(39);

注意的是:html如果字体太小则在Android手机上显示的就很小。一般为6、7号字体

eg:mWebView.setInitialScale(39);—————————————————————————————————————————————————————————————

(8)1.setPluginsEnabled现在已经不再支持,改为WebView.getSettings().setPluginState(WebSettings.PluginState.ON);,不过18版本以后也不再支持了因为adobe 不再开发flash新的移动版了。

eg:mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);

(9)mWebView.getSettings().setDefaultTextEncodingName("GB2312") ; //设置字符编码集

(10)设置该视图的滚动模式 void setOverScrollMode(int mode)

eg:mWebView.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);

(11) mWebView.setScrollBarStyle //设置滚动条风格

eg:mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); //取消滚动条

(12)mWebView.getSettings().setSupportZoom(true); // 设置可以支持缩放

(13)mWebView.getSettings().setBuiltInZoomControls(true);// 设置出现缩放工具

(14)webview.requestFocusFromTouch(); 如果webView中需要用户手动输入用户名、密码或其他,则webview必须设置支持获取手势焦点。

(15)//mWebView.loadUrl("http://www.pconline.com.cn/"); //设置加载页面

实例:

[java] view plain copy

 
  1. package com.channel.economic.ui;
  2. import android.annotation.SuppressLint;
  3. import android.content.Intent;
  4. import android.graphics.Bitmap;
  5. import android.os.Bundle;
  6. import android.text.TextUtils;
  7. import android.view.View;
  8. import android.webkit.WebSettings;
  9. import android.webkit.WebView;
  10. import android.webkit.WebViewClient;
  11. import butterknife.ButterKnife;
  12. import butterknife.InjectView;
  13. import com.channel.economic.Config;
  14. import com.channel.economic.R;
  15. import com.channel.economic.util.Log;
  16. import com.channel.economic.view.ProgressWebView;
  17. /**
  18.  * webview
  19.  *
  20.  * Created by huagt on 14-12-21.
  21.  */
  22. public class WebViewUI extends AbsActionUI {
  23.     /**
  24.      * 需要加载的网页
  25.      */
  26.     public static final String KEY_LOAD_URL = "key:load_url";
  27.     /**
  28.      * 需要显示的标题名
  29.      */
  30.     public static final String KEY_CONTENT_NAME = "key:cntent_name";
  31.     @InjectView(R.id.web_view) ProgressWebView mWebView;
  32.     private String mCurrentLoadUrl;
  33.     @Override
  34.     protected void onCreate(Bundle savedInstanceState) {
  35.         super.onCreate(savedInstanceState);
  36.         setContentView(R.layout.activity_webview);
  37.         ButterKnife.inject(this);
  38.         mCurrentLoadUrl = getIntent().getStringExtra(KEY_LOAD_URL);
  39.         String title = getIntent().getStringExtra(KEY_CONTENT_NAME);
  40.         setTitle(title);
  41.         initWebView();
  42.     }
  43.     /**
  44.      * 初始化WebView组件
  45.      */
  46.     @SuppressLint({"AddJavascriptInterface""SetJavaScriptEnabled"}) private void initWebView() {
  47.         mWebView.getSettings().setJavaScriptEnabled(true);
  48.         mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
  49.         mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
  50.         mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);
  51.         mWebView.setHorizontalScrollBarEnabled(true);
  52.         mWebView.setVerticalScrollBarEnabled(true);
  53.         final String USER_AGENT_STRING = mWebView.getSettings()
  54.                 .getUserAgentString() + " Rong/2.0";
  55.         mWebView.getSettings().setUserAgentString(USER_AGENT_STRING);
  56.         //mWebView.setInitialScale(39);
  57.         mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);
  58.         mWebView.getSettings().setDefaultTextEncodingName("GB2312") ;
  59.         mWebView.setWebViewClient(viewClient);
  60.         mWebView.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);
  61.         //设置WebView的一些缩放功能点
  62.         mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
  63.         //自适应屏幕
  64.         //mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
  65.         mWebView.getSettings().setLoadWithOverviewMode(true);
  66.         // 设置可以支持缩放
  67.         mWebView.getSettings().setSupportZoom(true);
  68.         // 设置出现缩放工具
  69.         mWebView.getSettings().setBuiltInZoomControls(true);
  70.         mWebView.requestFocus();
  71.         //mCurrentLoadUrl = "http://2015zh.hk001.china-dxz.net/web/";
  72.         mWebView.(mCurrentLoadUrl);
  73.         //mWebView.loadUrl("http://www.pconline.com.cn/");
  74.     }
  75.     /**
  76.      * WebView加载状态客户端回调
  77.      */
  78.     private WebViewClient viewClient = new WebViewClient() {
  79.         @Override
  80.         public void onPageStarted(WebView view, String url, Bitmap favicon) {
  81.         }
  82.         @Override
  83.         public boolean shouldOverrideUrlLoading(WebView view, String url) {
  84.             if (url.contains("tb.jsp")) {
  85.                 makeToast("付款成功!");
  86.                 setResult(RESULT_OK);
  87.                 Intent orderIntent = new Intent(WebViewUI.this,MineOrdersUI.class);
  88.                 startActivity(orderIntent);
  89.                 WebViewUI.this.finish();
  90.             } else {
  91.                 view.loadUrl(url);
  92.             }
  93.             return true;
  94.         }
  95.         @Override
  96.         public void onReceivedError(WebView view, int errorCode, String description,
  97.                                     String failingUrl) {
  98.             //view.loadUrl("file:///android_asset/404.html");
  99.         }
  100.     };
  101. }
相关文章
|
Android开发
webview常用方法
牙叔教程 简单易懂
221 0
|
消息中间件 安全 C#
WinForm-跨线程更新UI控件常用方法
WinForm-跨线程更新UI控件常用方法
637 0
WinForm-跨线程更新UI控件常用方法
|
JavaScript 前端开发 Android开发
|
Android开发 iOS开发 JavaScript
WKWebView代理方法解析
一.前言 上一篇文章已经对WKWebView做了一个简单的介绍,主要对它的一些方法和属性做了一个简单的介绍,今天看一下WKWebView的两个协议:WKNavigationDelegate 和 WKUIDelegate。
3183 0