webview 常用方法

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


(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.   
  3. import android.annotation.SuppressLint;  
  4. import android.content.Intent;  
  5. import android.graphics.Bitmap;  
  6. import android.os.Bundle;  
  7. import android.text.TextUtils;  
  8. import android.view.View;  
  9. import android.webkit.WebSettings;  
  10. import android.webkit.WebView;  
  11. import android.webkit.WebViewClient;  
  12. import butterknife.ButterKnife;  
  13. import butterknife.InjectView;  
  14.   
  15. import com.channel.economic.Config;  
  16. import com.channel.economic.R;  
  17. import com.channel.economic.util.Log;  
  18. import com.channel.economic.view.ProgressWebView;  
  19.   
  20. /** 
  21.  * webview 
  22.  * 
  23.  * Created by huagt on 14-12-21. 
  24.  */  
  25. public class WebViewUI extends AbsActionUI {  
  26.   
  27.     /** 
  28.      * 需要加载的网页 
  29.      */  
  30.     public static final String KEY_LOAD_URL = "key:load_url";  
  31.   
  32.     /** 
  33.      * 需要显示的标题名 
  34.      */  
  35.     public static final String KEY_CONTENT_NAME = "key:cntent_name";  
  36.   
  37.     @InjectView(R.id.web_view) ProgressWebView mWebView;  
  38.     private String mCurrentLoadUrl;  
  39.   
  40.     @Override  
  41.     protected void onCreate(Bundle savedInstanceState) {  
  42.         super.onCreate(savedInstanceState);  
  43.         setContentView(R.layout.activity_webview);  
  44.         ButterKnife.inject(this);  
  45.         mCurrentLoadUrl = getIntent().getStringExtra(KEY_LOAD_URL);  
  46.         String title = getIntent().getStringExtra(KEY_CONTENT_NAME);  
  47.   
  48.   
  49.         setTitle(title);  
  50.         initWebView();  
  51.     }  
  52.   
  53.     /** 
  54.      * 初始化WebView组件 
  55.      */  
  56.     @SuppressLint({"AddJavascriptInterface""SetJavaScriptEnabled"}) private void initWebView() {  
  57.         mWebView.getSettings().setJavaScriptEnabled(true);  
  58.         mWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);  
  59.         mWebView.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);  
  60.         mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);  
  61.         mWebView.setHorizontalScrollBarEnabled(true);  
  62.         mWebView.setVerticalScrollBarEnabled(true);  
  63.         final String USER_AGENT_STRING = mWebView.getSettings()  
  64.                 .getUserAgentString() + " Rong/2.0";  
  65.         mWebView.getSettings().setUserAgentString(USER_AGENT_STRING);  
  66.         //mWebView.setInitialScale(39);  
  67.   
  68.         mWebView.getSettings().setPluginState(WebSettings.PluginState.ON);  
  69.         mWebView.getSettings().setDefaultTextEncodingName("GB2312") ;  
  70.         mWebView.setWebViewClient(viewClient);  
  71.         mWebView.setOverScrollMode(View.OVER_SCROLL_IF_CONTENT_SCROLLS);  
  72.         //设置WebView的一些缩放功能点  
  73.         mWebView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);  
  74.         //自适应屏幕  
  75.         //mWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);  
  76.         mWebView.getSettings().setLoadWithOverviewMode(true);  
  77.         // 设置可以支持缩放  
  78.         mWebView.getSettings().setSupportZoom(true);  
  79.         // 设置出现缩放工具  
  80.         mWebView.getSettings().setBuiltInZoomControls(true);  
  81.   
  82.         mWebView.requestFocus();  
  83.   
  84.         //mCurrentLoadUrl = "http://2015zh.hk001.china-dxz.net/web/";  
  85.         mWebView.(mCurrentLoadUrl);  
  86.         //mWebView.loadUrl("http://www.pconline.com.cn/");  
  87.     }  
  88.   
  89.     /** 
  90.      * WebView加载状态客户端回调 
  91.      */  
  92.     private WebViewClient viewClient = new WebViewClient() {  
  93.         @Override  
  94.         public void onPageStarted(WebView view, String url, Bitmap favicon) {  
  95.   
  96.         }  
  97.   
  98.         @Override  
  99.         public boolean shouldOverrideUrlLoading(WebView view, String url) {  
  100.             if (url.contains("tb.jsp")) {  
  101.                 makeToast("付款成功!");  
  102.                 setResult(RESULT_OK);  
  103.                 Intent orderIntent = new Intent(WebViewUI.this,MineOrdersUI.class);  
  104.                 startActivity(orderIntent);  
  105.                 WebViewUI.this.finish();  
  106.             } else {  
  107.                 view.loadUrl(url);  
  108.             }  
  109.   
  110.             return true;  
  111.         }  
  112.   
  113.         @Override  
  114.         public void onReceivedError(WebView view, int errorCode, String description,  
  115.                                     String failingUrl) {  
  116.             //view.loadUrl("file:///android_asset/404.html");  
  117.         }  
  118.     };  
  119. }  

猜你喜欢

转载自blog.csdn.net/a243920187/article/details/79731585